我正在努力解决这个问题。我有一个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
的值对用户不可见,但在更新语句中是否可用?
答案 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>