private void Bind() { DataTable dt = new DataTable(); dt.Columns.Add("QID", typeof(int)); dt.Columns.Add("PID", typeof(int)); dt.Columns.Add("Question"); dt.Columns.Add("Answer"); DataRow dr; int uid = 0; ArrayList qs = null; using (BaseDb db = DbFactory.ConstructDatabase()) { if (!BaseDb.IsAdmin(Page.User) && !BaseDb.IsAnonymous(Page.User)) { uid = db.GetUid(Page.User.Identity.Name); } qs = db.GetQuestions(tid); } if (BaseDb.IsAdmin(Page.User)) { foreach (Question q in qs) { if (!q.Answered) { dr = dt.NewRow(); dr[0] = q.Qid; dr[1] = q.Pid; dr[2] = q.QuestioN; dr[3] = q.Answer; dt.Rows.Add(dr); } } } else { foreach (Question q in qs) { if (q.Uid == uid || q.Uid == 0) { dr = dt.NewRow(); dr[0] = q.Qid; dr[1] = q.Pid; dr[2] = q.QuestioN; dr[3] = q.Answer; dt.Rows.Add(dr); } } } questionsGrid.DataSource = dt; questionsGrid.DataBind(); HtmlFunctions.BeautifyDataGrid(questionsGrid); if (dt.Rows.Count == 0) { Hide("ѕо этому соревнованию нет вопросов"); } }
private void Bind(ArrayList sids) { DataTable dt = new DataTable(); DataRow dr; Submission s; BaseDb db = DbFactory.ConstructDatabase(); Contest con = db.GetContest(_rp.ContestID); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Время"); dt.Columns.Add("Команда"); dt.Columns.Add("Задача"); dt.Columns.Add("Язык"); dt.Columns.Add("Статус"); dt.Columns.Add("Тест №", typeof(uint)); dt.Columns.Add("Время работы"); dt.Columns.Add("Выделено памяти"); foreach (int sid in sids) { dr = dt.NewRow(); s = db.GetSubmission(sid); dr[0] = sid; dr[1] = HtmlFunctions.BeautifyTimeSpan(s.Time - con.Beginning, true); dr[2] = db.GetUser(s.UID).Fullname; dr[3] = String.Format("<a href='problem.aspx?pid={0}'>{1}</a>", s.PID, db.GetProblemShortName(s.PID)); dr[4] = s.SubmissionLanguage; string pattern = "<a href='viewdata.aspx?mode={0}&sid={1}'>{2}</a>"; if (s.Result.Code == Result.CE) { dr[5] = String.Format(pattern, "comp-report", sid, s.Result.ToHtmlString()); } else if (s.Result.Code == Result.FA) { dr[5] = String.Format(pattern, "error-report", sid, s.Result.ToHtmlString()); } else { dr[5] = s.Result.ToHtmlString(); } if (s.Result.TestNumber > 0) { dr[6] = s.Result.TestNumber; } if (s.Result.Code != Result.CE && s.Result.Code != Result.FA && s.Result.Code != Result.WAIT && s.Result.Code != Result.RU && s.Result.Code != Result.TLE) { dr[7] = Math.Round(s.Result.TimeWorked, 4) + " сек"; } if (s.Result.Code != Result.CE && s.Result.Code != Result.FA && s.Result.Code != Result.WAIT && s.Result.Code != Result.RU && s.Result.Code != Result.MLE) { dr[8] = s.Result.MemoryUsed + " КБ"; } dt.Rows.Add(dr); } db.Close(); statusGrid.DataSource = dt; statusGrid.DataBind(); }
void Bind() { bool judge = User.IsInRole("Judge"); List <Message> list = new List <Message>(); foreach (Message m in Message.GetMessages(selmess.Filter)) { if (judge || (!judge && m.UserID == User.Identity.Name)) { list.Add(m); } } questionsGV.DataSource = list; questionsGV.DataBind(); HtmlFunctions.BeautifyGridView(questionsGV); }
private void Page_Load(object sender, EventArgs e) { if (BaseDb.IsAnonymous(Page.User)) { throw new NeJudgeSecurityException("User, Administrator, Judge"); } if (!IsPostBack) { Page.Response.AddHeader("Refresh", "90"); ArrayList sids = new ArrayList(); int page = 0; #region параметры _rp = new RequirementsProcessor(this.GetType(), Context); _rp.ProcessRequirements(); if (Page.Request.QueryString["sname"] != null) { problem = Page.Request.QueryString["sname"]; } if (Page.Request.QueryString["result"] != null) { result = Page.Request.QueryString["result"]; } try { page = int.Parse(Page.Request.QueryString["page"]); } catch { page = 0; } using (BaseDb db = DbFactory.ConstructDatabase()) { if (_rp.UidDefined) { if (BaseDb.IsJudge(Page.User)) { filter.UserID = _rp.UserID; } else { throw new NeJudgeSecurityException("Judge"); } } if (_rp.TidDefined) { //filter.ContestID = _rp.ContestID; if (db.GetContest(_rp.ContestID).Future) { Hide("Невозможно просмотреть submissions будущего соревнования"); } else { int pid = -1; if (problem != "") { pid = db.GetPidByShortName(_rp.ContestID, problem); if (pid == -1) { throw new NeJudgeInvalidParametersException("sname"); } else { if (!Page.IsPostBack) { filter.ProblemID = problem[0]; } } } if (result != "") { try { Result r = (Result)Enum.Parse (typeof(Result), result); if (!Page.IsPostBack) { filter.Result = r; } } catch (ArgumentException) { throw new NeJudgeInvalidParametersException("result"); } } #endregion foreach (Submission s in db.GetSubmissions(_rp.ContestID, _rp.UidDefined ? _rp.UserID : 0, (problem == "") ? 0 : pid, result)) { sids.Add(s.SID); } if (sids.Count == 0) { //Hide("В этом соревновании нет ни одного submission"); } sids.Reverse(); statusGrid.VirtualItemCount = sids.Count; if (sids.Count - page * statusGrid.PageSize < 0) { page = sids.Count / statusGrid.PageSize; } statusGrid.CurrentPageIndex = page; ArrayList arr = new ArrayList(); int l; if (sids.Count - page * statusGrid.PageSize < statusGrid.PageSize) { l = sids.Count; } else { l = page * statusGrid.PageSize + statusGrid.PageSize; } for (int i = page * statusGrid.PageSize; i < l; i++) { arr.Add(sids[i]); } Bind(arr); HtmlFunctions.BeautifyDataGrid(statusGrid); } } else { Hide(null); } } } }
private void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { RequirementsProcessor rp = new RequirementsProcessor(GetType(), Context); rp.ProcessRequirements(); //Page.Response.AddHeader("Refresh","300"); if (rp.TidDefined) { Contest con; BaseDb db = DbFactory.ConstructDatabase(); using ( db ) { con = db.GetContest(rp.ContestID); if (con.Future) { Hide("Нельзя просмотреть монитор будущего соревнования"); db.Close(); } else { DateTime cur_time = TimeUtils.ZeroDateTime(DateTime.Now); DateTime t_begin = TimeUtils.ZeroDateTime(con.Beginning); DateTime t_end = TimeUtils.ZeroDateTime(con.Ending); // Последнее обновление TimeSpan dur = TimeUtils.ZeroTimeSpan(t_end - t_begin); TimeSpan elapsed = TimeUtils.ZeroTimeSpan((cur_time - t_begin < dur) ? cur_time - t_begin : dur); TimeSpan estimated = TimeUtils.ZeroTimeSpan(dur - elapsed); if (elapsed >= dur) { st_label.InnerHtml += "<span style='color:red;font-size:small;display:block;'>(Соревнование окончено)</span>"; } refresh.Text = HtmlFunctions.BeautifyTimeSpan(elapsed, false); // Продолжительность соревнования period.Text = HtmlFunctions.BeautifyTimeSpan(dur, false); left.Text = HtmlFunctions.BeautifyTimeSpan(estimated, false); } } /*DataTable mon_dt = new DataTable("Результаты"), stat_dt = new DataTable("Статистика"); * mon_dt.Columns.Add("ID"); * mon_dt.Columns.Add("Имя участника"); * //mon_dt.PrimaryKey = new DataColumn[]{mon_dt.Columns[0]}; * * stat_dt.Columns.Add("Показатель"); * DataRow dr = stat_dt.NewRow(); * dr[0] = "Команд решили"; * stat_dt.Rows.Add(dr); * dr = stat_dt.NewRow(); * dr[0] = "Команд решили/команд всего"; * stat_dt.Rows.Add(dr); * * int tid = rp.ContestID; * selcon.TID = tid; * BaseDb db = DbFactory.ConstructDatabase(); * //HyperLink1.NavigateUrl += tid; * //Прочитали результаты * Contest t; * * if ((t = db.GetContest(tid)).Future) * { * Hide("Нельзя просмотреть монитор будущего сорвевнования"); * db.Close(); * } * else * { * DateTime cur_time = ZeroDateTime(DateTime.Now); * DateTime t_begin = ZeroDateTime(t.Beginning); * DateTime t_end = ZeroDateTime(t.Ending); * * // Последнее обновление * TimeSpan dur = ZeroTimeSpan(t_end - t_begin); * TimeSpan elapsed = ZeroTimeSpan( (cur_time - t_begin < dur) ? cur_time - t_begin : dur); * TimeSpan estimated = ZeroTimeSpan(dur - elapsed); * if ( elapsed >= dur ) * { * st_label.InnerHtml += * "<span style='color:red;font-size:small;display:block;'>(Соревнование окончено)</span>"; * } * refresh.Text = HtmlFunctions.BeautifyTimeSpan(elapsed, false); * // Продолжительность соревнования * period.Text = HtmlFunctions.BeautifyTimeSpan(dur, false); * left.Text = HtmlFunctions.BeautifyTimeSpan(estimated, false); * * ArrayList ps = db.GetProblems(tid); * if (ps.Count == 0) * { * Hide("В этом соревновании нет задач"); * return; * } * int i = 0; * for (i = 0; i < ps.Count; i++) * { * mon_dt.Columns.Add(((Problem) ps[i]).ShortName); * //mon_dt.Columns.Add(string.Format("<a style='grid_first' href='problem.aspx?pid={0}'>{1}</a>",((Problem)ps[i]).PID, ((Problem)ps[i]).ShortName)); * stat_dt.Columns.Add(((Problem) ps[i]).ShortName); * //stat_dt.Columns.Add(string.Format("<a href='problem.aspx?pid={0}'>{1}</a>",((Problem)ps[i]).PID, ((Problem)ps[i]).ShortName)); * } * mon_dt.Columns.Add("Всего решено"); * mon_dt.Columns.Add("Время"); * mon_dt.Columns.Add("Место"); * //Колонки созданы * TimeSpan the_latest = new TimeSpan(0, 0, 0, 0, 0); * bool has_ac = false; * ArrayList user_data = new ArrayList(); * #region обработка очереди * * foreach (Submission s in db.GetSubmissions(tid, 0)) * { * // Юзер, пославший текущий сабмишн * UserData u = null; * foreach (UserData ud in user_data) * { * if (ud.UID == s.UID) * { * u = ud; * break; * } * } * // Новая строка с юзером * if (u == null) * { * u = new UserData(); * u.UID = (uint) s.UID; * u.Solved = 0; * u.Time = new TimeSpan(0, 0, 0, 0, 0); * u.Problems = new ArrayList(); * foreach (Problem p in ps) * { * Attempts at = new Attempts(); * at.AcTime = new TimeSpan(0, 0, 0, 0, 0); * at.Count = 0; * at.PID = (uint) p.PID; * u.Problems.Add(at); * } * user_data.Add(u); * } * Attempts subm_att = null; * foreach (Attempts sat in u.Problems) * { * if (sat.PID == s.PID) * { * subm_att = sat; * break; * } * } * if (subm_att == null) * { * throw new ApplicationException("Невозможно найти задачу в описании участника"); * } * if (s.Result.Code == Result.AC) * { * if (subm_att.Count <= 0) * { * // вычисление попыток * subm_att.Count = -subm_att.Count + 1; * subm_att.AcTime = s.Time - t_begin; * subm_att.AcTime = ZeroTimeSpan(subm_att.AcTime); * has_ac = true; * if (the_latest < subm_att.AcTime) * { * the_latest = subm_att.AcTime; * } * // начисление времени с учетом штрафа * u.Time += subm_att.AcTime + * new TimeSpan(0, 0, (subm_att.Count - 1)*20, 0, 0); * } * } * else if (s.Result.Code != Result.WAIT && s.Result.Code != Result.RU) * { * if (subm_att.Count <= 0) * { * subm_att.Count--; * } * } * } * #endregion * * foreach (UserData ud in user_data) * { * foreach (Attempts atte in ud.Problems) * { * if (atte.Count > 0) * { * ud.Solved++; * } * } * } * * if (has_ac) * { * lastac.Text = HtmlFunctions.BeautifyTimeSpan(the_latest, false); * } * else * { * lastac.Text = "Еще не было"; * } * user_data.Sort(new UserCompare()); * if (user_data.Count == 0) * { * st_label.InnerHtml += "<span style='color:#CFC411;font-size:small;display:block;'>(Не было послано ни одного решения)</span>"; * } * int[] ac_counts = new int[ps.Count]; * int[] total_counts = new int[ps.Count]; * foreach (UserData ud in user_data) * { * DataRow mon_dtr = mon_dt.NewRow(); * mon_dtr[0] = ud.UID; * User us = db.GetUser((int) ud.UID); * mon_dtr[1] = us.Fullname; * mon_dt.Rows.Add(mon_dtr); * for (int j = 0; j < ud.Problems.Count; j++) * { * int count = ((Attempts) ud.Problems[j]).Count; * if (count > 0) * { * // Write a result to the problem's column * mon_dtr[2 + j] = "<span style='color:blue;'>+"; * if (count != 1) * { * mon_dtr[2 + j] += (count - 1).ToString(); * } * mon_dtr[2 + j] += "</span><span style='font-size:smaller;display:block;'>("; * mon_dtr[2 + j] += HtmlFunctions.BeautifyTimeSpan(((Attempts) ud.Problems[j]).AcTime, true); * mon_dtr[2 + j] += ")</span>"; * // Update AC received users count * ac_counts[j]++; * total_counts[j]++; * } * else if (count < 0) * { * mon_dtr[2 + j] = "<span style='color:red;'>"; * mon_dtr[2 + j] += count.ToString(); * mon_dtr[2 + j] += "</span>"; * total_counts[j]++; * } * else * { * mon_dtr[2 + j] = ""; * } * } * mon_dtr[mon_dt.Columns.Count - 2] = (int) ud.Time.TotalMinutes; * mon_dtr[mon_dt.Columns.Count - 3] = ud.Solved; * } * db.Close(); * for (int l = 0; l < mon_dt.Rows.Count; l++) * { * mon_dt.Rows[l][mon_dt.Columns.Count - 1] = l + 1; * } * * * monitorDG.DataSource = mon_dt; * monitorDG.DataBind(); * #region статистика * * for (int k = 0; k < ps.Count; k++) * { * stat_dt.Rows[0][k + 1] = ac_counts[k]; * double ac_percent = (total_counts[k] == 0) * ? 0 : (double)ac_counts[k] / (double)total_counts[k] * 100.0; * stat_dt.Rows[1][k + 1] = String.Format("{0:F2}%", ac_percent); * } * statDG.DataSource = stat_dt; * statDG.DataBind(); * #endregion * * Draw(mon_dt.Columns.Count - 3); * }*/ Monitor m = MonitorManager.GetMonitor(rp.ContestID, Context); m.Reload(); if (m.HasAccepted) { lastac.Text = String.Format("{0}<br><strong>Задача {1}</strong>", HtmlFunctions.BeautifyTimeSpan( TimeUtils.ZeroTimeSpan(m.LastAccepted.Time - con.Beginning), false), m.LastAccepted.ProblemShortName); } else { lastac.Text = "Еще не было"; } DataTable mon = m.FormatMonitor(); monitorDG.DataSource = mon; monitorDG.DataBind(); Draw(mon.Columns.Count - 3); statDG.DataSource = m.FormatStats(); statDG.DataBind(); } else { Hide(""); } } }
public DataTable FormatMonitor() { DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Имя участника"); foreach (string s in _short_names) { dt.Columns.Add(s); } dt.Columns.Add("Всего решено"); dt.Columns.Add("Время"); dt.Columns.Add("Место"); UserCompare uc = new UserCompare(); int count = 1; init_db(); for (int i = 0; i < _users.Count; i++) { DataRow dr = dt.NewRow(); UserData ud = (UserData)_users[i]; dr[0] = ud.UID; dr[1] = _db.GetUser(ud.UID).Fullname; for (int j = 0; j < _prob_nums.Length; j++) { if (ud.Problems[j].Result > 0) { // Write a result to the problem's column dr[2 + j] = "<span style='color:blue;'>+"; if (ud.Problems[j].Result != 1) { dr[2 + j] += (ud.Problems[j].Result - 1).ToString(); } dr[2 + j] += "</span><span style='font-size:smaller;display:block;'>("; dr[2 + j] += HtmlFunctions.BeautifyTimeSpan( TimeUtils.ZeroTimeSpan(ud.Problems[j].AcTime - _con.Beginning), true); dr[2 + j] += ")</span>"; } else if (ud.Problems[j].Result < 0) { dr[2 + j] = "<span style='color:red;'>"; dr[2 + j] += ud.Problems[j].Result.ToString(); dr[2 + j] += "</span>"; } else { dr[2 + j] = ""; } } dr[dr.Table.Columns.Count - 3] = ud.Solved; dr[dr.Table.Columns.Count - 2] = ud.Time; if (i > 0 && uc.Compare(_users[i], _users[i - 1]) != 0) { count++; } dr[dr.Table.Columns.Count - 1] = count; dt.Rows.Add(dr); } close_db(); return(dt); }
protected void statusGV_DataBound(object sender, EventArgs e) { HtmlFunctions.BeautifyGridView(statusGV); }
private void Bind() { DataTable dt = new DataTable("Соревнования"); dt.Columns.Add("TID"); dt.Columns.Add("Name"); dt.Columns.Add("Monitor"); dt.Columns.Add("Beginning", typeof(DateTime)); dt.Columns.Add("Ending", typeof(DateTime)); dt.Columns.Add("Status"); DataRow dr; Contest t; using (BaseDb db = DbFactory.ConstructDatabase()) { int[] oldtids = db.GetOldTids(); int[] nowtids = db.GetNowTids(); int[] futtids = db.GetFutureTids(); foreach (int tid in nowtids) { t = db.GetContest(tid); dr = dt.NewRow(); dr[0] = tid; if (t.Future && !BaseDb.IsAdmin(Page.User)) { dr[1] = t.Name; } else { dr[1] = "<a href='contest.aspx?tid=" + tid + "'>" + t.Name + "</a>"; } if (!t.Future || BaseDb.IsAdmin(Page.User)) { dr[2] = "<a href='monitor.aspx?tid=" + tid + "'>Ссылка</a>"; } dr[3] = t.Beginning; dr[4] = t.Ending; dr[5] = "Идет"; dt.Rows.Add(dr); } foreach (int tid in futtids) { t = db.GetContest(tid); dr = dt.NewRow(); dr[0] = tid; if (t.Future && !BaseDb.IsAdmin(Page.User)) { dr[1] = t.Name; } else { dr[1] = "<a href='contest.aspx?tid=" + tid + "'>" + t.Name + "</a>"; } if (!t.Future || BaseDb.IsAdmin(Page.User)) { dr[2] = "<a href='monitor.aspx?tid=" + tid + "'>Ссылка</a>"; } dr[3] = t.Beginning; dr[4] = t.Ending; dr[5] = "Ещё не начиналось ( начнется через " + HtmlFunctions.BeautifyTimeSpan(db.GetContest(tid).Beginning - DateTime.Now, false) + " )"; dt.Rows.Add(dr); } foreach (int tid in oldtids) { t = db.GetContest(tid); dr = dt.NewRow(); dr[0] = tid; if (t.Future && !BaseDb.IsAdmin(Page.User)) { dr[1] = t.Name; } else { dr[1] = "<a href='contest.aspx?tid=" + tid + "'>" + t.Name + "</a>"; } if (!t.Future || BaseDb.IsAdmin(Page.User)) { dr[2] = "<a href='monitor.aspx?tid=" + tid + "'>Ссылка</a>"; } dr[3] = t.Beginning; dr[4] = t.Ending; dr[5] = "Закончилось"; dt.Rows.Add(dr); } } DataGrid1.DataSource = dt; DataGrid1.DataBind(); }