Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “从更新数据库”复选框_C#_Asp.net_Gridview_Checkbox - Fatal编程技术网

C# “从更新数据库”复选框

C# “从更新数据库”复选框,c#,asp.net,gridview,checkbox,C#,Asp.net,Gridview,Checkbox,我有一个GridView和一个ItemTemplate字段,该字段捕获选中复选框的ID,我有AutoPostBack=false,因此它不会立即更新,我有一个asp:Button,我想用它运行一个update语句,用复选框中的所有ID更新数据库。我正在安排事情,但我不断得到一个错误 对象引用未设置为对象的实例 按下按钮时,更具体地说,抛出错误的是这行代码: string dbrowtoupdate = ((Label)row.FindControl("dataid")).Text; 这是我的网

我有一个
GridView
和一个
ItemTemplate
字段,该字段捕获选中复选框的
ID
,我有
AutoPostBack=false
,因此它不会立即更新,我有一个
asp:Button
,我想用它运行一个update语句,用复选框中的所有
ID
更新数据库。我正在安排事情,但我不断得到一个错误

对象引用未设置为对象的实例

按下按钮时,更具体地说,抛出错误的是这行代码:

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; }
}

受保护的void btnUpdateDB_单击(对象发送方,事件参数e)
{
尝试
{
foreach(gridviewtrythis.Rows中的GridViewRow行)
{
字符串dbrowtoupdate=((Label)row.FindControl(“dataid”)).Text;
if(row.RowType==DataControlRowType.DataRow)
{
}
}
}
catch(异常){throw Exception;}
}

将有问题的代码行更改为:

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

        }
}

我愿意打赌labelToUpdate是空的,所以它不会进入循环。如果要查看该行中包含哪些控件,请在搜索label控件的位置放置断点,并检查“row”变量,但将其更改为使用“as label”然后在获取.Text之前检查空值,这样可以防止空值引用向前移动。

将有问题的代码行更改为:

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

        }
}

我愿意打赌labelToUpdate是空的,所以它不会进入循环。如果要查看该行中包含哪些控件,请在搜索label控件的位置放置断点,并检查“row”变量,但将其更改为使用“as label”然后在获取.Text之前检查空值,这样可以防止空引用向前移动。

尝试将有问题的代码行拆分为两行。一个从行中获取标签,然后下一个从标签中获取字符串值(如果它不为null)。我猜它找不到Label控件,因此您试图从一个空变量中获取.Text。@Ageonix-我该怎么做?@Ageonix-删除了错误,但它实际上没有从网格中的行捕获值。我稍微修改了查找控件的行。如果改为尝试此方法,它是否仍然为空?var labelToUpdate=row.FindControl(“dataid”)作为标签;尝试将有问题的代码行拆分为两行。一个从行中获取标签,然后下一个从标签中获取字符串值(如果它不为null)。我猜它找不到Label控件,因此您试图从一个空变量中获取.Text。@Ageonix-我该怎么做?@Ageonix-删除了错误,但它实际上没有从网格中的行捕获值。我稍微修改了查找控件的行。如果改为尝试此方法,它是否仍然为空?var labelToUpdate=row.FindControl(“dataid”)作为标签;