Exemplo n.º 1
0
        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("ѕо этому соревнованию нет вопросов");
            }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
                    }
                }
            }
        }
Exemplo n.º 5
0
        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("");
                }
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
 protected void statusGV_DataBound(object sender, EventArgs e)
 {
     HtmlFunctions.BeautifyGridView(statusGV);
 }
Exemplo n.º 8
0
        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();
        }