2013-10-03 3 views
1

У меня есть gridView с текстовым полем внутри шаблонаField. Я хочу извлечь текст текстового поля, если в строке отмечен флажок.Как найти элемент управления внутри TemplateField в Gridview

У меня есть 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. Кто-нибудь поймет, почему?

+1

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Спасибо за совет – Selrac

ответ

5

Вы не можете сделать это. Когда вы нажимаете кнопку: B_Load, тогда GridView НЕ находится в режиме редактирования. И вот почему вы не можете получить TextBox, который находится в EditItemTemplate.

Вы можете получить только элементы управления внутри <ItemTemplate>, нажав кнопку, так как gridview находится в режиме нормального отображения. <EditItemTemplate> элементы управления отображаются только тогда, когда GridView вводит Edit режим.

Итак, вы должны получить значение метки: Label1 здесь фактически, что имеет такое же значение и находится внутри <ItemTemplate>.

Dim Lbl_Control As Label= CType(row.FindControl("Label1"), 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 
+3

Вы также можете проверить, находится ли строка в состоянии редактирования If row.RowState = DataControlRowState.Edit Then –

+0

Perfect !!! Это определило проблему. Бесконечно благодарен!! – Selrac

Смежные вопросы