您好我有一個網格視圖與每個行中的文本框即時嘗試獲取RowCommand事件的值。下面的代碼適用於所有行,期望第一個。第一行的textbox.text值始終爲空。ASP.NET GridView的RowCommand文本框空
<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事件不會被觸發。
我發現我有點奇怪,它適用於除第一個以外的所有行。
你真的想綁定gridview只有它是一個回發,它通常是反過來做。 –
那麼我最初通過搜索函數綁定gridview,但是如果gridview沒有綁定在回發的rowCommand事件不會被觸發。 – user346443
好吧,所以我將MasterPages ContentPlaceHolder EnableViewState設置爲false,並且它工作正常。 – user346443