从包含多个控件的单元格中选择特定控件

时间:2017-10-16 11:53:18

标签: c# asp.net

在我的asp .net GridView的最后一栏中,我有一个图像和一个复选框。我想检查是否选中了所有行的复选框。我在if得到空引用异常,因为chk可能为空。任何帮助?

try
{
    foreach (GridViewRow row in grdSurveyDetails.Rows)
    {
        int index = row.Cells.Count - 1;
        CheckBox chk = row.Cells[index].Controls[1] as CheckBox;
        int rowIndex = row.RowIndex;
        if (chk.Checked)
        {
            ClientScript.RegisterClientScriptBlock(typeof(Page), "alert", "<script>alert("+rowIndex+" is checked!);</script>");
        }
    }
}
catch (Exception)
{  
    throw;
}  

2 个答案:

答案 0 :(得分:1)

我假设您通过代码填充gridview,以便在最后一个单元格中始终有一个图像和复选框。如果是这种情况,我想到的是你可能正在访问那里没有复选框的标题行。

尽管如此,你可以尝试在那里进行空检查,比如

if (chk?.Checked) 
那是吗?正在为你做空检查。如果它为null,则不要对该行执行任何操作。

注意:如果单元格并不总是包含图像和复选框,那么请小心,因为您可能在该单元格中有一个不在索引1的复选框(即:您可以考虑使用@Rojalin Sahoo方法来搜索明确复选框)

答案 1 :(得分:0)

您可以像这样检查所有选中的内容 让我们说你有

<强> .aspx的

<asp:TemplateField>
        <ItemTemplate>
            <asp:CheckBox ID="chkRow" runat="server" />
        </ItemTemplate>
    </asp:TemplateField>

然后在

代码背后

 foreach (GridViewRow row in grdSurveyDetails.Rows)
{
    if (row.RowType == DataControlRowType.DataRow)
    {
        int index = row.Cells.Count - 1;
        CheckBox chkRow = (row.Cells[index].FindControl("chkRow") as CheckBox);
        if (chkRow.Checked)
        {
            //do something
        }
    }
}

请看这个完整的例子 Here