Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果启用了行中的复选框,如何更改GridView中行的背景色?_C#_Asp.net_Gridview - Fatal编程技术网

C# 如果启用了行中的复选框,如何更改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

我想更改GridView中未选中“活动”列值的所有行的背景色。我尝试了以下方法,但不起作用:

 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>