У меня есть сетчатое изображение в моей мастерской веб-проекта visual studio 2015. Я заполняю gridview в codebehind через Datatable. И Datatable имеют 4 столбца, а один столбец - Status (отображает цвета RED, ORANGE и GREEN) в зависимости от данных для этого поля.Как сортировать столбец сетки по цвету ячейки?
Я установил таймер каждые 30 секунд, чтобы обновить сетку (код позади - функция загрузки данных). Я хочу, чтобы столбец был отсортирован по цвету по статусу = 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>
Моей код-Behind коды.
// 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();
Это почти весь код. Я удалил ненужный код, чтобы заполнить строки данных сверху.
Брус добавить больше столбцов. Есть ли другой способ сделать это? Как вы думаете, я могу как-то скрыть эту колонку и все еще использовать сортировку по ней? – Jag
да, вы можете сделать StatusWeight скрытым столбцом и по-прежнему сортировать его. Просто соберите его в запросе или datatable, прежде чем связывать. https://msdn.microsoft.com/en-us/library/bb383893(v=vs.90).aspx http://stackoverflow.com/questions/9107916/sorting-rows-in-a-data-table – Muckeypuck
Обе ссылки предназначены для datagridview, которые не работают. они устарели. – Jag