如何更改数据阅读器中单元格的颜色?

本文关键字:单元格 颜色 何更改 数据 | 更新日期: 2023-09-27 18:01:54

我正在遍历数组并使用下面的代码创建行。状态返回真或假。如果它为假,我想把那个特定单元格的背景色设为红色。如何更改单元格的颜色?

  <asp:DataGrid ID="DataGrid1" runat="server" AlternatingItemStyle-BackColor="#e4e4e4" AutoGenerateColumns="false" >
    <Columns>
            <asp:BoundColumn DataField="Name" HeaderText="Name" >
                    <HeaderStyle BackColor="#4B6C9E" ForeColor="White" />
                    <ItemStyle Width="240px" Wrap="True" />
            </asp:BoundColumn>
            <asp:BoundColumn DataField="Status" HeaderText="Coupon Status" >
                    <HeaderStyle BackColor="#4B6C9E" ForeColor="White" />
                    <ItemStyle Width="20px" Wrap="True" />
            </asp:BoundColumn>
    </Columns>
    </asp:DataGrid>

背后的代码:

                DataTable dt = new DataTable();
                dt.Columns.Add("Name");
                dt.Columns.Add("Status");
                // Looping through the rows here. 
                DataSet datareader = db.ExecuteDataSet(command);
                DataRow dr = dt.NewRow();
                dr["Name"] = datareader.Tables[0].Rows[0]["Name"];
                dr["Status"] = datareader.Tables[0].Rows[0]["Status"];
                dt.Rows.Add(dr);
                DataGrid1.DataSource = dt;
                DataBind();

如何更改数据阅读器中单元格的颜色?

在DataGrid上有一个ItemDataBound事件,或者类似的东西。挂钩到它,你应该能够检查状态列的值,并设置相应的单元格颜色。

使用模板获取自定义设置,

<ItemTemplate>
    <asp:Panel ID="pnlCol1" runat="server">
        <asp:Label ID="LabelName" runat="server" 
            Text='<%# Eval("Name") %>' OnDataBind="LabelName_DataBind" />
    </asp:Panel>
</ItemTemplate>
protected void LabelName_DataBind(object sender, EventArgs e)
{
    Label label = (Label)sender;
    Panel panel = (Panel)label.NameingContainer;    
    // Set color here to panel
    panel.BackColor = Color.Red;
}

或者您可以使用PreRender事件。

添加onitemdatabound事件到您的网格

<asp:DataGrid ID="DataGrid1" runat="server" 
        AlternatingItemStyle-BackColor="#e4e4e4" AutoGenerateColumns="false" 
        onitemdatabound="DataGrid1_ItemDataBound" >  
    <Columns>
        <asp:BoundColumn DataField="Name" HeaderText="Name" >
            <HeaderStyle BackColor="#4B6C9E" ForeColor="White" />
            <ItemStyle Width="240px" Wrap="True" />
        </asp:BoundColumn>
        <asp:BoundColumn DataField="Status" HeaderText="Coupon Status" >
            <HeaderStyle BackColor="#4B6C9E" ForeColor="White" />
            <ItemStyle Width="20px" Wrap="True" />
        </asp:BoundColumn>
     </Columns>
</asp:DataGrid>

在你的代码后面,你可以设置你的状态列的背景颜色,如果状态为假。

protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var status = Convert.ToBoolean(((DataRowView)e.Item.DataItem).Row.ItemArray[1]);
        if (!status)
        {
            e.Item.Cells[1].BackColor = System.Drawing.Color.Red;
        }
    }
}