你好,我有一个网格视图,每行都有一个文本框,我试图在RowCommand事件中获取它的值。下面的代码对除第一行之外的所有行都很有效。第一行的textbox.text值总是空的。
<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_OnRowCommand" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
Title <%# Eval("Title")%>
<asp:TextBox ID="TextBoxAddPost" runat="server"></asp:TextBox>
<asp:LinkButton ID="LinkButtonAddPost" CommandName="AddPost" CommandArgument='<%# Eval("postId") %>' runat="server">Add Post</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if(IsPostBack)
bindGridView();
}
protected void GridView1_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "AddPost")
{
GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
TextBox textBox = (TextBox)row.FindControl("TextBoxAddPost");
//Empty for first row but works for all others
Debug.WriteLine("row: " + row.RowIndex + ", textBox:" + textBox.Text.Trim());
GridView1.DataBind();
}
}
为了便于说明,上面的代码已经被简化了。每一行实际上都包含一个子网格视图,因此我们需要在每一行都有一个文本框。我担心page_load中的绑定会覆盖文本框的值,但是,如果没有page_load绑定,rowCommand事件就不会被触发。
我觉得我有点奇怪,除了第一行,它对所有行都很好用。
2条答案
按热度按时间ubbxdtey1#
要从文本框中获取数据,您必须先通过以下代码设置文本属性。
它肯定会从文本框中给予值。
无论哪种方式,您也可以设置gridview.Click here for datakeynames的datakeynames属性
yyyllmsg2#
我试过了,效果很好,GridView1_OnRowCommand通过单击LinkButtonAddPost触发:
并像这样修改page_load事件:
把你的代码和我的代码比较一下。