获取Databound上的CheckBox值,然后设置GridView行颜色(如果选中)

时间:2017-02-10 14:02:03

标签: c# asp.net gridview

我的应用程序是ASP.Net,C#,Webforms。 我有一个Gridview - 名为gvCustNames 我将gridview设置为在OnDataBound="setRowColor"

上运行代码

这是我的C#语法:

protected void setRowColor(object sender, GridViewRowEventArgs e)
    {
        foreach (GridViewRow row in gvCustNames.Rows)
        {
            CheckBox chkRow = (row.Cells[3].FindControl("cbViewCutsomer") as CheckBox);
            if (chkRow.Checked)
            {
                e.Row.BackColor = System.Drawing.Color.PaleGreen;
            }
        }
    }

应用程序编译好了没有错误但是当我尝试在浏览器中查看它时出现此错误:

  

方法或委托sbmanager.cm.setRowColor(object, System.Web.UI.WebControls.GridViewRowEventArgs)' parameters do not match delegate System.EventHandler(object,System.EventArgs)'参数

这意味着我没有使用正确的事件处理程序。 我应该使用什么处理程序?

1 个答案:

答案 0 :(得分:2)

您正在处理OnDataBound,一旦整个GridView完成数据绑定过程就会调用它。确实期待EventArgs参数。这就是错误的原因。现在您有两个选择:

  1. 简单。用EventArgs替换GridViewRowEventArgs。请务必同时使用e.Row更改row

  2. 可能更清楚。无论如何,您正在遍历所有行,那么为什么不处理OnRowDataBound呢? Args保持不变,不需要循环:

    protected void setRowColor(object sender, GridViewRowEventArgs e)
    {
        CheckBox chkRow = (e.Row.Cells[3].FindControl("cbViewCutsomer") as CheckBox);
        if (chkRow != null && chkRow.Checked)
        {
            e.Row.BackColor = System.Drawing.Color.PaleGreen;
        }
    }