在我的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;
}
答案 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