我正在努力处理这段代码。我有一个 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/