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

时间:2017-11-12 08:09:57

标签: 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的值对用户不可见,但在更新语句中是否可用?

1 个答案:

答案 0 :(得分:2)

使用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>