2011-09-05 35 views
5

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.

+5

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. –

+0

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

+0

Ok, vì vậy tôi đặt MasterPages ContentPlaceHolder EnableViewState thành false và nó hoạt động. – user346443

Trả lời

0

Để nhận dữ liệu từ hộp văn bản, trước tiên bạn phải đặt thuộc tính văn bản bằng cách đặt mã bên dưới.

<asp:TextBox ID="TextBoxAddPost" runat="server" Text='<%# Eval("Title") %>'></asp:TextBox> 

Nó chắc chắn sẽ mang lại giá trị từ hộp văn bản.

Dù bằng cách nào, bạn cũng có thể đặt thuộc tính datakeynames của GridView. Click here for datakeynames

0

tôi đã cố gắng này và nó hoạt động tốt, GridView1_OnRowCommand cháy bằng cách nhấp vào LinkButtonAddPost:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"> 
      <Columns> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <asp:TextBox ID="TextBoxAddPost" runat="server" Text='<%# Eval("ID") %>'></asp:TextBox> 
         <asp:LinkButton ID="LinkButtonAddPost" CommandName="AddPost" CommandArgument='<%# Eval("ID") %>' runat="server">Add Post</asp:LinkButton> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

và thay đổi sự kiện Page_Load của bạn như thế này:

protected void Page_Load(object sender, EventArgs e) 
    { 
     GridView1.DataSource = Data.RequestPaymentDB.GetRequestPaymentByRequestID(9208060001); 
     GridView1.DataBind(); 
    } 

so sánh mã của bạn với tôi.

Các vấn đề liên quan