C# 为什么ID为空,从Gridview中选择?

C# 为什么ID为空,从Gridview中选择?,c#,asp.net,gridview,C#,Asp.net,Gridview,为什么deviceID是空的,我是从SP填充的。在后端,它提供了完美的结果,甚至完美地填充了Gridview,但在.cs级别,它会产生问题 Select DeviceID, TerminalSNO, SoftwareVersion from Transport.Devices 它给出了完美的结果,但在asp.net中,它从gridview中选择“” GV: 添加GridView的RowType,例如if(Row.RowType==DataControlRowType.DataRow) 您的代码

为什么deviceID是空的,我是从SP填充的。在后端,它提供了完美的结果,甚至完美地填充了Gridview,但在.cs级别,它会产生问题

Select DeviceID, TerminalSNO, SoftwareVersion from Transport.Devices
它给出了完美的结果,但在asp.net中,它从gridview中选择

GV:


添加
GridView的
RowType
,例如
if(Row.RowType==DataControlRowType.DataRow)

您的代码:

foreach (GridViewRow Row in GridviewDevicesBulkUpdate.Rows)
 {
    if (Row.RowType == DataControlRowType.DataRow)
    {
    CheckBox chkUpdate = (CheckBox)Row.FindControl("CheckBoxIncludes");


     if (chkUpdate.Checked == true)
        {
         string DeviceID = Row.Cells[0].Text.Trim();
         if (ManageTransport.ManageDevices.UpdateAllDevices(IsCardPwdUpdated, SoftwareVersion, IsActive, int.Parse(DeviceID)))
         {
           Response = true;
         }
         else
         {
         Response= false;
         }
      }
    }
    }

我猜原因是您使用了一个不可见的
边界字段
。您可以在此处阅读:

因此,您可以按照此处的建议操作,也可以使用带有标签的
TemlateField

<Columns>
     <ItemTemplate>
        <Label runat="server" ID="LblDeviceID" Text='<%# Eval("DeviceID") %> ' Visible="false"  />
    </ItemTemplate>
    <asp:BoundField DataField="TerminalSNO" HeaderText="Serial No." ItemStyle-CssClass="visible-desktop"
        HeaderStyle-CssClass="visible-desktop" />
    <asp:BoundField DataField="SoftwareVersion" HeaderText="Software Version" ItemStyle-CssClass="visible-desktop"
        HeaderStyle-CssClass="visible-desktop" />
    <asp:TemplateField HeaderText="Includes ?">
        <ItemTemplate>
            <asp:CheckBox runat="server" ID="CheckBoxIncludes" Text="." CssClass="checkbox checkbox-danger" />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

同时,我总是使用
模板字段
,因为你可以在那里使用任何html,你不会遇到这样的问题。它们更灵活。

不使用
Row.Cells[3].FindControl(“CheckBoxIncludes”)
行.FindControl(“CheckBoxIncludes”)
GridViewRow
复选框的
NamingContainer
,但它在字符串DeviceID=Row.Cells[0].Text.Trim()处抛出错误;这不是一个解决方案(那么我会回答),而是一个建议。我不使用
BoundField
而是使用带有不可见标签的
TemplateField
,该标签的文本具有
DeviceID
。然后可以使用
(Label)Row.FindControl(“LblDeviceID”)。Text
哦,是的,好的,让我检查一下这不是必需的。如果使用
GridviewDevicesBulkUpdate.Rows
仅返回
RowType
DataControlRowType.DataRow
的行。您只能在
行创建
行数据绑定
中获取页眉或页脚。这在“rows集合中仅存储其
RowType
属性设置为
DataControlRowType.DataRow
的行。表示页眉、页脚和寻呼机行的GridViewRow对象不包括在集合中。”
CheckBox chkUpdate = (CheckBox)Row.FindControl("CheckBoxIncludes");
foreach (GridViewRow Row in GridviewDevicesBulkUpdate.Rows)
 {
    if (Row.RowType == DataControlRowType.DataRow)
    {
    CheckBox chkUpdate = (CheckBox)Row.FindControl("CheckBoxIncludes");


     if (chkUpdate.Checked == true)
        {
         string DeviceID = Row.Cells[0].Text.Trim();
         if (ManageTransport.ManageDevices.UpdateAllDevices(IsCardPwdUpdated, SoftwareVersion, IsActive, int.Parse(DeviceID)))
         {
           Response = true;
         }
         else
         {
         Response= false;
         }
      }
    }
    }
<Columns>
     <ItemTemplate>
        <Label runat="server" ID="LblDeviceID" Text='<%# Eval("DeviceID") %> ' Visible="false"  />
    </ItemTemplate>
    <asp:BoundField DataField="TerminalSNO" HeaderText="Serial No." ItemStyle-CssClass="visible-desktop"
        HeaderStyle-CssClass="visible-desktop" />
    <asp:BoundField DataField="SoftwareVersion" HeaderText="Software Version" ItemStyle-CssClass="visible-desktop"
        HeaderStyle-CssClass="visible-desktop" />
    <asp:TemplateField HeaderText="Includes ?">
        <ItemTemplate>
            <asp:CheckBox runat="server" ID="CheckBoxIncludes" Text="." CssClass="checkbox checkbox-danger" />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>
Label lblDeviceID = (Label)Row.FindControl("LblDeviceID");
string DeviceID = lblDeviceID.Text;