如何更改数据阅读器中单元格的颜色?
本文关键字:单元格 颜色 何更改 数据 | 更新日期: 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;
}
}
}