从复选框更新数据库

时间:2016-02-06 16:53:46

标签: c# asp.net gridview checkbox

我有一个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; }
}

1 个答案:

答案 0 :(得分:0)

将违规行代码更改为:

Label labelToUpdate = row.FindControl("dataid") as Label;
if (labelToUpdate)
{
   string dbrowtoupdate = labelToUpdate.Text;
   if (row.RowType == DataControlRowType.DataRow)
        {

        }
}

我愿意打赌labelToUpdate为空,因此它不会进入循环。在您正在搜索标签控件的位置放置一个断点并检查&#34; row&#34;变量,如果你想看到该行包含哪些控件,但更改为使用&#34;作为标签&#34;然后在获取.Text之前检查null是否应该保护你免受Null Reference向前移动。