Xin chào Tôi có chế độ xem lưới với một hộp văn bản trong mỗi hàng mà tôi đang cố gắng lấy giá trị của sự kiện RowCommand. Mã bên dưới hoạt động tốt cho tất cả các hàng mong đợi hàng đầu tiên. Giá trị textbox.text cho hàng đầu tiên luôn trống.ASP.NET GridView RowCommand TextBox trống
<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>
Mã-đằng sau:
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();
}
}
Đoạn mã trên đã được đơn giản hóa cho mục đích minh hoạ. Mỗi hàng thực sự chứa một GridView con, do đó tại sao cần hộp văn bản trong mỗi hàng. Tôi sợ rằng ràng buộc trong page_load là ghi đè lên giá trị của hộp văn bản, tuy nhiên, không có ràng buộc page_load, rowCommand Event sẽ không được kích hoạt.
Tôi thấy tôi hơi lạ khi nó hoạt động tốt cho tất cả các hàng ngoại trừ hàng đầu tiên.
Bạn có thực sự muốn ràng buộc Gridview ONLY nếu nó là một postback, nó là bình thường để làm điều đó theo cách khác tròn. –
Vâng tôi ban đầu ràng buộc GridView thông qua một chức năng tìm kiếm, nhưng nếu GridView không bị ràng buộc trên bài viết trở lại sự kiện rowCommand không bị sa thải. – user346443
Ok, vì vậy tôi đặt MasterPages ContentPlaceHolder EnableViewState thành false và nó hoạt động. – user346443