C# 如果启用了行中的复选框,如何更改GridView中行的背景色?
我想更改GridView中未选中“活动”列值的所有行的背景色。我尝试了以下方法,但不起作用:C# 如果启用了行中的复选框,如何更改GridView中行的背景色?,c#,asp.net,gridview,C#,Asp.net,Gridview,我想更改GridView中未选中“活动”列值的所有行的背景色。我尝试了以下方法,但不起作用: protected void GdvDetails_RowDataBound(object sender, GridViewRowEventArgs e) { CheckBox chkItem = null; foreach (GridViewRow grRow in GdvDetails.Rows) { if (grRow.RowType == DataCon
protected void GdvDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
CheckBox chkItem = null;
foreach (GridViewRow grRow in GdvDetails.Rows)
{
if (grRow.RowType == DataControlRowType.DataRow)
{
chkItem = (CheckBox)grRow.Cells[6].FindControl("active");
if (chkItem.Checked )
{
grRow.BackColor = Color.Red;
}
}
}
}
错误消息是“对象引用未设置为对象的实例。”您的代码不起作用,因为您需要在
RowDataBund上执行此操作
protected void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
//Paste your code here.
}
}
并为RowDataBound添加处理程序,如下所示:
<asp:gridview id="CustomersGridView"
allowpaging="true"
onrowdatabound="CustomersGridView_RowDataBound"
runat="server">
</asp:gridview>
您需要处理RowDataBound
事件,而不是DataBound
事件,因此将您置于RowDataBound
事件中,如下所示:
在aspx页面中,添加事件后,代码如下所示:
<asp:gridview id="GdvDetails"
onrowdatabound="GdvDetails_RowDataBound"
runat="server">
</asp:gridview>
所以这是有效的:)
而aspx文件
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID= "CkbActive" Checked ='<%# Bind ("active") %>' Enabled="false" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
在GridView GdvDetails中
我没有使用onrowdatabound下的代码,因为它对每一行都是一个事件,我认为它将进行不必要的迭代。这很有效。。。以防万一还有人像我一样摸索?!!thx对于所有帮助该异常来自哪一行(以及哪个代码示例)?以及“GdvDetails.SelectedRow.BackColor=Color.LightGray;”如果执行sec部分。当绑定GridView时,是否以编程方式创建复选框?也就是说,复选框是在c#代码中定义的还是在aspx标记中定义的?在aspx标记中…..我要做的是选中这个从搜索查询填充的特定复选框列,然后在未选中的情况下指定颜色。我尝试在rowdatabound和rowcreated中执行此操作,但它会抛出相同的错误消息!!这可能是你想要走的路。即使您在不同的事件中循环查看结果,我认为检查行类型也是您的问题。无论哪种方式,答案都在这里。我现在尝试了这段代码,它不会抛出任何错误,但未选中的行不会更改。受保护的void GdvDetails_DataBinding(object sender,EventArgs e){CheckBox chkItem=null;foreach(GridViewRow grRow in GdvDetails.rows){if(grRow.RowType==DataControlRowType.DataRow)chkItem=(复选框)grRow.FindControl(“活动”);if(chkItem.Checked){grRow.BackColor=Color.Red;}}}@初次约会:不,你没有尝试我的代码。同样,你需要在OnRowDataBound上而不是在DataBinding上进行。我在rowdatabound中尝试了它并添加了处理程序,但它仍然抛出相同的错误你确定GridView
中的复选框的Id
处于活动状态,如果没有,请更正它或在这里(CheckBox)e.Row.FindControl(“active”);
(删除active
并放置正确的复选框Id)我尝试将更改为,并将复选框Id设置为CkbActive,现在代码行为chkItem=(CheckBox)grRow.Cells[6]。FindControl(“CkbActive”);我引入了断点,在布尔变量中,我将ckeckbox的值设为false或true。但是gridview并没有像它应该的那样改变它的背景色。
protected void GdvDetails_DataBound(object sender, EventArgs e)
{
CheckBox chkItem = null;
foreach (GridViewRow grRow in GdvDetails.Rows)
{
if (grRow.RowType == DataControlRowType.DataRow)
{
chkItem = (CheckBox)grRow.Cells[6].FindControl("CkbActive");
bool bl = chkItem.Checked;
if (bl == false)
{
grRow.BackColor = Color.LightGray;
}
}
}
}
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID= "CkbActive" Checked ='<%# Bind ("active") %>' Enabled="false" runat="server"/>
</ItemTemplate>
</asp:TemplateField>