Tengo un gridView con un cuadro de texto dentro de un templateField. Yo wan para extraer el texto del textBox si una casilla está marcada en la fila.

Tengo el gridView se define de la siguiente manera

    <asp:GridView ID="GV_Comments" runat="server" AutoGenerateColumns="False" DataKeyNames="id"
        DataSourceID="SQL_Comments">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox runat="server" ID="Comment_Select" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
            <asp:TemplateField HeaderText="comment" SortExpression="comment">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("comment") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="CommentForPeriod" runat="server" Text='<%# Bind("comment") %>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView> 
    <asp:Button ID="B_Load" runat="server" Text="Transfer Selection" onclick="B_Load_Click" />
    <br />
    <asp:TextBox ID="CompiledText" runat="server" Width="662px" Rows="10" 
        TextMode="MultiLine"></asp:TextBox>

Y el código de la siguiente manera

Protected Sub B_Load_Click(ByVal sender As Object, ByVal e As EventArgs) '(sender As Object, e As System.EventArgs) Handles B_Load.Click
    Dim FullText As String = ""
    For Each row As GridViewRow In GV_Comments.Rows
        Dim CB_Control As CheckBox = CType(row.FindControl("Comment_Select"), CheckBox)
        Dim Txt_Control As TextBox = CType(row.FindControl("CommentForPeriod"), TextBox)
        If CB_Control IsNot Nothing AndAlso CB_Control.Checked AndAlso Txt_Control IsNot Nothing Then
            FullText = FullText & Txt_Control.Text & "<br/>"
        End If
    Next row
    CompiledText.Text = FullText.ToString
End Sub

Cuando me depurar el código se puede ver que el control de Casilla de verificación se encuentra, pero no el control de cuadro de texto. Alguien podría ver por qué?

InformationsquelleAutor Selrac | 2013-10-03

1 Comentario

  1. 5

    No puedes hacer esto. Cuando usted haga clic en el botón: B_Load, entonces GridView NO está en modo de Edición. Y esta es la razón por la que no puede llegar a la TextBox, que es en EditItemTemplate.

    Usted puede conseguir solamente los controles dentro de <ItemTemplate> en el botón haga clic en como gridview está en el Modo de visualización Normal. <EditItemTemplate> controles se representan sólo cuando GridView entra Edit modo.

    Es así, usted necesita para obtener el valor de la Etiqueta: Label1 aquí, en realidad, que tiene el mismo valor y es dentro de <ItemTemplate> .

     Dim Lbl_Control As Label= CType(row.FindControl("Label1"), Label)

    //haga clic con el botón como de costumbre, acaba de obtener y comprobar el valor de la Etiqueta de control, en lugar de control de cuadro de texto.

    Protected Sub B_Load_Click(ByVal sender As Object, ByVal e As EventArgs) '(sender As
                               Object, e As System.EventArgs) Handles B_Load.Click
        Dim FullText As String = ""
        For Each row As GridViewRow In GV_Comments.Rows
            Dim CB_Control As CheckBox = CType(row.FindControl("Comment_Select"), 
                                               CheckBox)
            Dim Lbl_Control As Label= CType(row.FindControl("Label1"), Label)
            If CB_Control IsNot Nothing AndAlso CB_Control.Checked AndAlso Lbl_Control
               IsNot Nothing Then
                FullText = FullText &  Lbl_Control.Text & "<br/>"
            End If
        Next row
        CompiledText.Text = FullText.ToString
    End Sub
    • También puede verificar si la fila está en estado de edición Si la fila.RowState = DataControlRowState.Edición», Luego A
    • Perfecto!!! Que ha resuelto el problema. Un millón de gracias!!

Dejar respuesta

Please enter your comment!
Please enter your name here