繁体   English   中英

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

[英]Getting CheckBox value on Databound then setting the GridView row color if checked

我的应用程序是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)'的参数sbmanager.cm.setRowColor(object, System.Web.UI.WebControls.GridViewRowEventArgs)' parameters do not match delegate

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

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

  1. 简单。 用EventArgs替换GridViewRowEventArgs。 确保还用row更改e.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; } } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM