我的visual studio 2015母版页面项目中有一个gridview。我通过Datatable在codebehind中填充gridview。 Datatable有4列,一列是Status(显示颜色RED,ORANGE和GREEN),具体取决于该字段的数据。
我每隔30秒设置一次计时器来刷新gridview(代码隐藏 - 数据加载功能)。我希望在status = RED ASC(顶部为红色)上按颜色对列进行排序。
我想找出实现这个想法的方法
我的aspx页面代码在
下面<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<div> </div>
<asp:Timer ID="ctlTimer" runat="server" Interval="30000" OnTick="OnTimerIntervalElapse">
</asp:Timer>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="lblTimer" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel runat="server" ID="pnlUpdate" EnableViewState="False">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ctlTimer" EventName="Tick" />
</Triggers>
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" Width="100%" AllowSorting="True"></asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
我的代码 - 背后的代码。
// create data table
DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
// create columns
dt.Columns.Add(new DataColumn("col1", typeof(string)));
dt.Columns.Add(new DataColumn("Status", typeof(string)));
dt.Columns.Add(new DataColumn("col3", typeof(string)));
dt.Columns.Add(new DataColumn("col4", typeof(string)));
// get list of items to display
getListofSystems(1);
// clear datatable
dt.Clear();
}
protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var statusValue = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Status"));
if (statusValue == "Red")
{
e.Row.Cells[1].BackColor = Color.FromName("Red");
}
if (statusValue == "Orange")
{
e.Row.Cells[1].BackColor = Color.FromName("Orange");
}
if (statusValue == "Green")
{
e.Row.Cells[1].BackColor = Color.FromName("Green");
}
}
}
protected void OnTimerIntervalElapse(object sender, EventArgs e)
{
getListofSystems(1);
}
将数据加载为下面的代码/逻辑。
DataRow dr = dt.NewRow();
// display system name
dr["col1"] = ID;
// Get status from database
switch (status)
{
case "red":
dr["Status"] = "Red";
break;
case "orange":
dr["Status"] = "Orange";
break;
case "green":
dr["Status"] = "Green";
break;
}
dr["col3"] = Datetime.Now;
dr["col4"] = contact;
// add row to datatable
dt.Rows.Add(dr);
// bind data to gridview
GridView1.Visible = true;
GridView1.DataSource = dt;
GridView1.DataBind();
这几乎是所有代码。我已经删除了不必要的代码来填充上面的数据行。
答案 0 :(得分:2)
使用int数据类型
添加列StatusWeight// Get status from database
switch (status)
{
case "red":
dr["Status"] = "Red";
dr["StatusWeight"] = 1;
break;
case "orange":
dr["Status"] = "Orange";
dr["StatusWeight"] = 2;
break;
case "green":
dr["Status"] = "Green";
dr["StatusWeight"] = 3;
break;
}
然后按StatusWeight列进行排序