为什么ID是空的,从Gridview中挑选出来的?
Why ID is empty, picked from Gridview?
为什么deviceID是空的,我是从SP里面填的。在后端它给出完美的结果甚至完美地填充 Gridview 但在 .cs 级别它会产生问题
Select DeviceID, TerminalSNO, SoftwareVersion from Transport.Devices
它给出了完美的结果,但在 asp.net 中它从 gridview
中选择了 ""
GV:
<asp:GridView ID="GridviewDevicesBulkUpdate" runat="server" Width="100%" AutoGenerateColumns="False"
DataKeyNames="DeviceID" CssClass="table table-hover table-striped table-bordered">
<Columns>
<asp:BoundField DataField="DeviceID" HeaderText="DeviceID" Visible="false" ItemStyle-CssClass="visible-desktop" />
<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>
</asp:GridView>
.cs
foreach (GridViewRow Row in GridviewDevicesBulkUpdate.Rows)
{
CheckBox chkUpdate = (CheckBox)Row.Cells[3].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;
}
}
}
添加 RowType
个 GridView
,例如 if (Row.RowType == DataControlRowType.DataRow)
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;
}
}
}
}
我猜是因为你用了隐形的BoundField
。您可以在这里阅读:
Retrieve data from visible false BoundField of Gridview
所以您可以按照那里的建议或使用带有标签的 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>
然后您可以通过以下方式在代码隐藏中检索值:
Label lblDeviceID = (Label)Row.FindControl("LblDeviceID");
string DeviceID = lblDeviceID.Text;
与此同时,我一直在使用 TemplateFields
,因为您可以在那里使用任何 html,而不会 运行 遇到此类问题。它们只是更灵活。
为什么deviceID是空的,我是从SP里面填的。在后端它给出完美的结果甚至完美地填充 Gridview 但在 .cs 级别它会产生问题
Select DeviceID, TerminalSNO, SoftwareVersion from Transport.Devices
它给出了完美的结果,但在 asp.net 中它从 gridview
中选择了""
GV:
<asp:GridView ID="GridviewDevicesBulkUpdate" runat="server" Width="100%" AutoGenerateColumns="False"
DataKeyNames="DeviceID" CssClass="table table-hover table-striped table-bordered">
<Columns>
<asp:BoundField DataField="DeviceID" HeaderText="DeviceID" Visible="false" ItemStyle-CssClass="visible-desktop" />
<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>
</asp:GridView>
.cs
foreach (GridViewRow Row in GridviewDevicesBulkUpdate.Rows)
{
CheckBox chkUpdate = (CheckBox)Row.Cells[3].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;
}
}
}
添加 RowType
个 GridView
,例如 if (Row.RowType == DataControlRowType.DataRow)
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;
}
}
}
}
我猜是因为你用了隐形的BoundField
。您可以在这里阅读:
Retrieve data from visible false BoundField of Gridview
所以您可以按照那里的建议或使用带有标签的 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>
然后您可以通过以下方式在代码隐藏中检索值:
Label lblDeviceID = (Label)Row.FindControl("LblDeviceID");
string DeviceID = lblDeviceID.Text;
与此同时,我一直在使用 TemplateFields
,因为您可以在那里使用任何 html,而不会 运行 遇到此类问题。它们只是更灵活。