如何更改datareader中单元格的颜色?

时间:2011-07-13 15:36:53

标签: c# asp.net

我正在遍历我的数组并使用下面的代码创建行。 Status返回true或false。如果它是假的我想将该特定单元格的背景颜色设置为红色。如何更改单元格的颜色?

  <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();

3 个答案:

答案 0 :(得分:0)

DataGrid上有一个ItemDataBound事件,或类似的东西。陷入其中,您应该能够检查状态列值并相应地设置单元格颜色。

答案 1 :(得分:0)

使用模板获取自定义设置

<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事件。这取决于您的需求。

答案 2 :(得分:0)

将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>

如果状态为false,您可以在代码隐藏中设置状态列的背景颜色。

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;
        }
    }
}