c# - ASP C# GridView 从编辑值更新 SQL 数据库

标签 c# css asp.net gridview sql-update

我正在努力处理这段代码。我有一个 gridview,它有一个可见列和一个不可见列 (Visible="False")。不可见列是系统值,因此我不想向用户显示。

 <asp:TemplateField HeaderText="Del. Qty">
     <ItemTemplate>
          <%# Eval("QUANTITY")%>
     </ItemTemplate>
     <EditItemTemplate>
          <asp:TextBox runat="server" ID="txtQuantity" Text='<%# Eval("QUANTITY")%>' />
     </EditItemTemplate>
 </asp:TemplateField>
 <asp:TemplateField HeaderText="System ID" Visible="False">
     <ItemTemplate>
          <%# Eval("SYS_ID")%>
     </ItemTemplate>
     <EditItemTemplate>
          <asp:TextBox runat="server" ID="txtSys" Text='<%# Eval("SYS_ID")%>' />
     </EditItemTemplate>
 </asp:TemplateField>

C#代码:

protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e)
{
    var row = GridView2.Rows[e.RowIndex];
    var txtQuantity = (TextBox) row.FindControl("txtQuantity");
    var txtSys = (TextBox) row.FindControl("txtSys");

    var qty = Convert.ToDecimal(txtQuantity.Text);
    var sysId = txtSys.Text;

    UpdateProduct(qty, sysId);
}

在调试时,我注意到问题是 txtSys 经常显示为 NULL。如何使 SYS_ID 的值对用户不可见,但可用于更新语句?

最佳答案

当您使用 Visible=false 时,该列不会呈现到 gridview 中。因此,当您尝试使用 row.FindControl 时,它将返回 NULL,因为控件实际上并不存在。

不是使用 Visible=false,而是用一个没有可见性的 DIV 包围该元素:

<EditItemTemplate>
    <div style="visibility:hidden;">
       <asp:TextBox runat="server" ID="txtSys" Text='<%# Eval("SYS_ID")%>' />
    </div>
</EditItemTemplate>

关于c# - ASP C# GridView 从编辑值更新 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47246764/

相关文章:

asp.net - 一个页面可以有多个ScriptManager吗?如果是的话,在什么条件下需要呢?

c# - Windows Phone 8.1 中的 Adrotator。 XAML

c# - 如何创建可以像 UserControl 一样进行编辑的 TabPage 子类?

javascript - 在动画侧边栏中隐藏子菜单

css - 如何使用CSS3选择器忽略IE8?

asp.net - 当用户在同一个 Web 应用程序中从一个网站集转到另一个网站集时,如何检测事件?

c# - 我如何知道对象属性是否具有默认值?

c# - 与 C# 和 VB.NET 兼容的 Nuget 包

html - 三级 CSS 下拉菜单

c# - Server.MapPath VS。 @Href ("~/SomeFile.cshtml")