C# 错误';对象引用未设置为对象的实例';在grid.FindControl期间
有人知道我的代码哪里出错了吗?我在.cs文件下编写了以下代码以获取网格计数:C# 错误';对象引用未设置为对象的实例';在grid.FindControl期间,c#,asp.net,C#,Asp.net,有人知道我的代码哪里出错了吗?我在.cs文件下编写了以下代码以获取网格计数: int totalCount = grid.FindControl("employee_to_rep").Controls.Count; for (int i = 0; i < totalCount; i++) { CheckBox ck = (CheckBox)grid.FindControl("employee_to_rep").Controls[i];
int totalCount = grid.FindControl("employee_to_rep").Controls.Count;
for (int i = 0; i < totalCount; i++)
{
CheckBox ck = (CheckBox)grid.FindControl("employee_to_rep").Controls[i];
HiddenField employeeIDValue = (HiddenField)grid.FindControl("employeeidToRep").Controls[i];
if (ck.Checked)
{
test = employeeIDValue.Value.ToString();
}
}
有人知道那里发生了什么吗
aspx文件中的代码:
<tr>
<th class="graytext r">Add Reps to Team:</th>
<td>
<asp:GridView ID="grid" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID"
DataSourceID="dsEmployees" AllowPaging="true" PageSize="1000" EnableViewState="false"
GridLines="None" CssClass="clGridDirectory">
<Columns>
<asp:TemplateField >
<ItemTemplate>
<asp:CheckBox runat="server" ID='employee_to_rep' Text='<%# Eval("fullname") %>'/>
<asp:HiddenField runat="server" ID="employeeidToRep" Value='<%# Eval("employeeid") %>'/>
<asp:TextBox runat='server' ID='repID' Text='<%# Eval("rep_id") %>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="dsEmployees" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>"
SelectCommand="app_staff_without_team_select" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
</td>
</tr>
向团队中添加代表:
在访问结果之前,您可以尝试检查FindControl的结果:
if (grid.FindControl("employee_to_rep") != null)
理想情况下,您可以使用as运算符进行强制转换,然后在下一步中检查null
[编辑]
根据其他答案……如果您在gridview行中进行迭代,则需要跳过页眉和页脚ROE,只签入数据行:
foreach (GridViewRow gvr in GridView1.Rows)
{
if (gvr.RowType == DataControlRowType.DataRow)
{
// do your thing
}
}
在访问结果之前,您可以尝试检查FindControl的结果:
if (grid.FindControl("employee_to_rep") != null)
理想情况下,您可以使用as运算符进行强制转换,然后在下一步中检查null
[编辑]
根据其他答案……如果您在gridview行中进行迭代,则需要跳过页眉和页脚ROE,只签入数据行:
foreach (GridViewRow gvr in GridView1.Rows)
{
if (gvr.RowType == DataControlRowType.DataRow)
{
// do your thing
}
}
我想您必须在
GridViewRow
上调用FindControl
grid.Row[0].FindControl("employee_to_rep")
foreach (GridViewRow gvr in grid.Rows)
{
CheckBox ck = (CheckBox)gvr.FindControl("employee_to_rep");
HiddenField employeeIDValue = (HiddenField)gvr.FindControl("employeeidToRep");
if (ck.Checked)
{
test = employeeIDValue.Value.ToString();
}
}
第一排
grid.Row[grid.SelectedIndex].FindControl("employee_to_rep")
对于当前选择的行(如果选择了一行)我认为您必须在
GridViewRow
上调用FindControl
grid.Row[0].FindControl("employee_to_rep")
foreach (GridViewRow gvr in grid.Rows)
{
CheckBox ck = (CheckBox)gvr.FindControl("employee_to_rep");
HiddenField employeeIDValue = (HiddenField)gvr.FindControl("employeeidToRep");
if (ck.Checked)
{
test = employeeIDValue.Value.ToString();
}
}
第一排
grid.Row[grid.SelectedIndex].FindControl("employee_to_rep")
对于当前选定的行(如果选定了一行)我实际上没有使用ASP,但我猜: msdn上的文档说明: 此方法将仅查找控件 如果控件是直接包含的 用指定的容器;就是, 该方法不会在整个过程中进行搜索 内部控件的层次结构 控制 可能是将
employee\u to_rep
控件包含在asp:TemplateField
和ItemTemplate
(或asp:GridView
本身中的另一个容器)中会阻止FindControl
方法按预期工作
然而,文件最后说
有关如何查找
当你不知道它的时候控制它
直接容器,请参阅
我并不真正使用ASP,但我猜: msdn上的文档说明: 此方法将仅查找控件 如果控件是直接包含的 用指定的容器;就是, 该方法不会在整个过程中进行搜索 内部控件的层次结构 控制 可能是将
employee\u to_rep
控件包含在asp:TemplateField
和ItemTemplate
(或asp:GridView
本身中的另一个容器)中会阻止FindControl
方法按预期工作
然而,文件最后说
有关如何查找
当你不知道它的时候控制它
直接容器,请参阅
在我看来,下面这行代码正在搜索控件中的任何控件
int totalCount = grid.FindControl("employee_to_rep").Controls.Count;
您可能需要将上面的行稍微分开,以检查哪一部分是导致空引用的原因。
尝试:
我怀疑上面的方法会起作用,但是它在所定位的控件内找不到任何控件
int totalCount = grid.FindControl("employee_to_rep").Controls.Count;
您可能会使用递归方法来解决您的问题。
看看这个:
希望这能有所帮助。在我看来,下面这行代码正在搜索控件中的任何控件
int totalCount = grid.FindControl("employee_to_rep").Controls.Count;
您可能需要将上面的行稍微分开,以检查哪一部分是导致空引用的原因。
尝试:
我怀疑上面的方法会起作用,但是它在所定位的控件内找不到任何控件
int totalCount = grid.FindControl("employee_to_rep").Controls.Count;
您可能会使用递归方法来解决您的问题。
看看这个:
希望这对您有所帮助。您可以使用
GridViewRow
进行操作
grid.Row[0].FindControl("employee_to_rep")
foreach (GridViewRow gvr in grid.Rows)
{
CheckBox ck = (CheckBox)gvr.FindControl("employee_to_rep");
HiddenField employeeIDValue = (HiddenField)gvr.FindControl("employeeidToRep");
if (ck.Checked)
{
test = employeeIDValue.Value.ToString();
}
}
您可以使用
GridViewRow
执行此操作
grid.Row[0].FindControl("employee_to_rep")
foreach (GridViewRow gvr in grid.Rows)
{
CheckBox ck = (CheckBox)gvr.FindControl("employee_to_rep");
HiddenField employeeIDValue = (HiddenField)gvr.FindControl("employeeidToRep");
if (ck.Checked)
{
test = employeeIDValue.Value.ToString();
}
}
但这里的问题是找到了14条记录,grid.FindControl(“employee_to_rep”)不应该被删除null@Jin应该是什么并不重要,重要的是应该是什么。如果FindControl返回null,将导致您收到错误消息。我想补充一下我的原始答案……但这里的问题是找到了14条记录,而grid.FindControl(“employee_to_rep”)不应该被删除null@Jin应该是什么并不重要,重要的是应该是什么。如果FindControl返回null,将导致您收到错误消息。我要补充我原来的答案。。。