2011-09-05 43 views
5

Hola Tengo una vista de cuadrícula con un cuadro de texto en cada fila que estoy tratando de obtener el valor de en el evento RowCommand. El siguiente código funciona bien para todas las filas. Espere la primera. El valor textbox.text para la primera fila siempre está vacío.ASP.NET GridView RowCommand TextBox vacío

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

de código subyacente:

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(); 
     } 
} 

El código anterior se ha simplificado con fines ilustrativos. Cada fila en realidad contiene una vista de cuadrícula infantil, de ahí que necesite el cuadro de texto en cada fila. Me temo que el enlace en page_load sobrescribe el valor del cuadro de texto, sin embargo, sin el enlace page_load, el evento rowCommand no se activa.

Me parece un poco extraño que funciona bien para todas las filas, excepto la primera.

+5

¿Realmente desea vincular la vista de cuadrícula SÓLO si se trata de una devolución de datos, es habitual hacerlo al revés. –

+0

Bueno, inicialmente vinculo la vista de cuadrícula a través de una función de búsqueda, pero si la vista de cuadrícula no está enlazada en la publicación, el evento rowCommand no se activa. – user346443

+0

Ok, entonces configuré MasterPages ContentPlaceHolder EnableViewState en falso, y funcionó. – user346443

Respuesta

0

Para obtener datos del cuadro de texto, primero debe establecer la propiedad del texto poniendo el código siguiente.

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

Definitivamente dará valor desde el cuadro de texto.

De cualquier forma, también puede establecer la propiedad datakeynames de gridview. Click here for datakeynames

0

He intentado esto y funciona bien, GridView1_OnRowCommand incendios haciendo clic en 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> 

y cambiar su evento Page_Load como esto:

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

comparar el código con la mía.

Cuestiones relacionadas