如何通过代码隐藏在数据表中设置背景颜色?

Sub*_*bbu 3 c# asp.net

我将数据绑定在数据表中,然后将该数据表绑定到数据网格中.我希望数据表的某些行应该以某种颜色突出显示.我们怎样才能从代码隐藏中做到这一点?

Giu*_*uto 5

您可以使用以下代码段为网格的行着色:

foreach (DataGridItem item in DataGrid1.Rows) {
    item.BackColor = Color.Red;
}
Run Code Online (Sandbox Code Playgroud)

您现在可以在foreach循环中放置一个条件,只为所需的行着色:

counter = 0;
foreach (DataGridItem item in DataGrid1.Rows) {
    if (counter % 2 == 0)
        item.BackColor = Color.Black;
    else
        item.BackColor = Color.Red;

    ++counter;
}
Run Code Online (Sandbox Code Playgroud)

或者,正如RPM1984的回答中所提到的,你也可以将自己附加到OnItemDataBound事件上,这是一个更好的解决方案(取决于具体情况),因为你不必手动遍历所有行:

ASPX:

<asp:DataGrid ID="DataGrid1" OnItemDataBound="ItemDataBound" runat="server">
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

public void ItemDataBound(object sender, DataGridItemEventArgs e) {
        e.Item.BackColor = Color.Red;
}
Run Code Online (Sandbox Code Playgroud)

关于发票和收据的着色,您可以使用以下代码片段来实现您想要的,假设您正在调整使用OnItemDataBound事件来更新行的方法BackColor:

代码隐藏:

public void ItemDataBound(object sender, DataGridItemEventArgs e) {
        SalesPosition salesItem = e.Item.DataItem as SalesPosition;

        if(salesItem == null) return;

        if(salesItem.Type == SalesPositionType.Invoice)
            e.Item.BackColor = Color.Yellow;

        else if(salesItem.Type == SalesPositionType.Receipt)
            e.Item.BackColor = Color.Green;
    }
Run Code Online (Sandbox Code Playgroud)


RPM*_*984 5

您需要挂钩DataGridItemDataBound事件,以便动态设置所需的属性.

在HTML上,将DataGrid 的OnItemDataBound属性设置为服务器端事件.

<asp:DataGrid id="ItemsGrid" runat="server"
           ...
           OnItemDataBound="Item_Bound">
Run Code Online (Sandbox Code Playgroud)

然后连接服务器端事件处理程序:

void Item_Bound(Object sender, DataGridItemEventArgs e) 
{
  // some code to handle each bound item
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据ListItemType枚举翻转颜色:

if(e.Item.ItemType == ListItemType.Item)
   e.Item.BackColor = Color.Red;
else if (e.Item.ItemType == ListItemType.AlternatingItem)
   e.Item.BackColor = Color.Blue
Run Code Online (Sandbox Code Playgroud)