예제 #1
0
        private void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                RequirementsProcessor rp = new RequirementsProcessor(GetType());
                rp.ProcessRequirements();
                //Page.Response.AddHeader("Refresh","300");
                if (rp.ContestIDDefined)
                {
                    selcon.ContestID = rp.ContestID;

                    Contest con = Contest.GetContest(rp.ContestID);
                    if (con.Time == ContestTime.Forthcoming)
                    {
                        throw new NeJudgeException("Нельзя просмотреть монитор будущего соревнования");
                    }
                    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 = TimeUtils.BeautifyTimeSpan(elapsed, false);
                    // Продолжительность соревнования
                    period.Text = TimeUtils.BeautifyTimeSpan(dur, false);
                    left.Text   = TimeUtils.BeautifyTimeSpan(estimated, false);


                    ContestTypeHandler h   = Factory.GetHandlerInstance(con.Type);
                    DataTable[]        dts = h.MonitorManager.Build(con.ID);
                    for (int i = 0; i < dts.Length; i++)
                    {
                        DataTable dt = dts[i];
                        monitorPH.Controls.Add(new LiteralControl(dt.TableName));
                        DataGrid gv = new DataGrid();
                        gv.Width                = new Unit(100.0, UnitType.Percentage);
                        gv.CellPadding          = 5;
                        gv.HeaderStyle.CssClass = "gridHeader";
                        gv.DataSource           = dt;
                        gv.DataBind();
                        h.MonitorManager.PaintDataGrid(gv, i, dt.Columns.Count - 3);
                        monitorPH.Controls.Add(gv);
                        if (i != dts.Length - 1)
                        {
                            monitorPH.Controls.Add(new LiteralControl("<br />"));
                        }
                    }
                }
                else
                {
                    info.Visible = false;
                }
            }
        }
예제 #2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("ID");
            dt.Columns.Add("Name");
            dt.Columns.Add("Monitor");
            dt.Columns.Add("Beginning", typeof(DateTime));
            dt.Columns.Add("Ending", typeof(DateTime));
            dt.Columns.Add("Status");

            Contest[] cons = Contest.GetContests(ContestTime.Current |
                                                 ContestTime.Forthcoming | ContestTime.Past);

            foreach (Contest cnt in cons)
            {
                DataRow dr = dt.NewRow();
                dr[0] = cnt.ID;
                if (cnt.Time == ContestTime.Forthcoming && !Page.User.IsInRole("Administrator"))
                {
                    dr[1] = cnt.Name;
                }
                else
                {
                    dr[1] = UrlRenderer.RenderContestUrl(cnt);
                }
                if (cnt.Time == ContestTime.Forthcoming && !Page.User.IsInRole("Judge"))
                {
                    dr[2] = "Недоступен";
                }
                else
                {
                    dr[2] = UrlRenderer.RenderMonitorUrl(cnt);
                }
                dr[3] = cnt.Beginning;
                dr[4] = cnt.Ending;
                switch (cnt.Time)
                {
                case ContestTime.Current:
                    dr[5] = String.Format("Идет (конец через {0})",
                                          TimeUtils.BeautifyTimeSpan(cnt.Ending - DateTime.Now, false));
                    break;

                case ContestTime.Forthcoming:
                    dr[5] = String.Format("Еще не начиналось (начало через {0})",
                                          TimeUtils.BeautifyTimeSpan(cnt.Beginning - DateTime.Now, false));
                    break;

                case ContestTime.Past:
                    dr[5] = "Закончилось";
                    break;
                }
                dt.Rows.Add(dr);
            }

            contestsGV.DataSource = dt;
            contestsGV.DataBind();
        }