【问题标题】:How to find a control inside a TemplateField in Gridview如何在 Gridview 的 TemplateField 中找到控件
【发布时间】:2013-10-10 02:31:54
【问题描述】:

我有一个 gridView,在 templateField 中有一个 textBox。如果在行中标记了复选框,我想提取文本框的文本。

我的gridView定义如下

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

代码如下

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

当我调试代码时,我可以看到 Checkbox 控件但没有找到 TextBox 控件。有人知道为什么吗?

【问题讨论】:

标签: asp.net vb.net gridview templatefield


【解决方案1】:

你不能这样做。当您单击按钮时:B_Load,则 GridView 未处于编辑模式。这就是为什么你不能得到TextBox,它位于EditItemTemplate。

您只能通过单击按钮获得&lt;ItemTemplate&gt; 中的控件,因为gridview 处于正常显示模式。 &lt;EditItemTemplate&gt; 控件仅在 GridView 进入 Edit 模式时才会呈现。

所以,这里实际上需要获取Label的值:Label1,它具有相同的值,并且在&lt;ItemTemplate&gt;内部。

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

//按钮点击正常,只是获取并检查Label控件的值,而不是TextBox控件。

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

【讨论】:

  • 也可以检查row是否处于编辑状态 If row.RowState = DataControlRowState.Edit Then
猜你喜欢
  • 2011-10-15
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
相关资源
最近更新 更多