我有一个GridView
带有ItemTemplate
捕获捕获到ID
的复选框的字段的字段,并且我有一个字段,AutoPostBack=false
所以它不会立即更新,我有一个asp:Button
我想C#
用来运行更新语句来更新所有数据库的数据库。ID's
从选中的复选框中。我正在设置东西,但不断出现错误
你调用的对象是空的
当按下按钮时,更具体地,这行代码引发错误:
string dbrowtoupdate = ((Label)row.FindControl("dataid")).Text;
这是我的网格的HTML \ C#,它的源是一个SQL查询,并且填充得很好。
<tr>
<td valign="top">
<asp:GridView runat="server" ID="gridviewtrythis" AutoGenerateColumns="false" >
<Columns>
<asp:BoundField DataField="Name" HeaderText="Full Name" />
<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" Text='<%#Eval("dataid") %>' ID="dataid" Visible="false"></asp:Label>
</ItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbox" runat="server" AutoPostBack="false" Checked='<%# Convert.ToBoolean(Eval("cbox")) %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button runat="server" ID="btnUpdateDB" Text="Add" OnClick="btnUpdateDB_Click" />
</td>
</tr>
protected void btnUpdateDB_Click(object sender, EventArgs e)
{
try
{
foreach (GridViewRow row in gridviewtrythis.Rows)
{
string dbrowtoupdate = ((Label)row.FindControl("dataid")).Text;
if (row.RowType == DataControlRowType.DataRow)
{
}
}
}
catch (Exception exception) { throw exception; }
}
将有问题的代码行更改为此:
Label labelToUpdate = row.FindControl("dataid") as Label;
if (labelToUpdate)
{
string dbrowtoupdate = labelToUpdate.Text;
if (row.RowType == DataControlRowType.DataRow)
{
}
}
我愿意打赌labelToUpdate为null,所以它不会进入循环。在要查找标签控件的位置放置一个断点,并检查“行”变量(如果要查看该行中包含哪些控件),但是将其更改为使用“ as Label”,然后在获取之前检查是否为null .Text应该保护您免受Null Reference的影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句