GridView не позволяет найти какой-либо элемент управления

0

Я хочу использовать вложенное gridview. Но моя родительская сетка не показывает Nothing в переменной ChildGrid.

Любая помощь? Я пробовал следующие способы:

1)

Dim gvChild As GridView = CType (Me.gvwSubjectForProject.FindControl("gvChildGrid"), GridView)

2)

Dim gvChild As GridView = Me.gvwSubjectForProject.FindControl("gvChildGrid") gvChild.DataSource = dt_Subject gvChild.DataBind()

Я хочу найти идентификатор дочерней решетки, а затем хочу присвоить ему источник данных.

VB

Частная функция FillGrid (режим ByVal As String, ByVal dt_Subject As DataTable) В качестве логического "Dim dt_Subject As DataTable = Nothing" Dim dt_sortsubject As DataTable = Nothing Try

        If (mode = "ParentGrid") Then
            Me.gvwSubjectForProject.DataSource = Nothing
            Me.gvwSubjectForProject.DataBind()
            'Me.ViewState(VS_CurrentSubject) = Nothing
            Me.btnExport.Visible = False

            'dt_Subject.Columns.Add("Status", GetType(String))
            If Not dt_Subject Is Nothing Then
                If dt_Subject.Rows.Count > 0 Then
                    If dt_Subject.Rows.Count > 0 Then
                        For Each dr_Row In dt_Subject.Rows
                            If dr_Row("cStatus") = "AC" Then
                                dr_Row("Status") = "Active"
                            ElseIf dr_Row("cStatus") = "IA" Then
                                dr_Row("Status") = "In Active"
                            ElseIf dr_Row("cStatus") = "HO" Then
                                dr_Row("Status") = "Hold"
                            ElseIf dr_Row("cStatus") = "SC" Then
                                dr_Row("Status") = "Screened"
                            ElseIf dr_Row("cStatus") = "BO" Then
                                dr_Row("Status") = "Booked"
                            ElseIf dr_Row("cStatus") = "OS" Then
                                dr_Row("Status") = "On Study"
                            ElseIf dr_Row("cStatus") = "FI" Then
                                dr_Row("Status") = "Forever Ineligible"
                            Else
                                dr_Row("cStatus") = "Not Found"
                            End If
                        Next
                        Me.btnExport.Visible = True
                        'Me.ViewState(VS_CurrentSubject) = dt_Subject
                        Me.gvwSubjectForProject.DataSource = dt_Subject
                        Me.gvwSubjectForProject.DataBind()
                    End If
                End If
            End If

        ElseIf (mode = "ChildGrid") Then
            If Not dt_Subject Is Nothing Then
                If dt_Subject.Rows.Count > 0 Then

                    'Me.gvwSubjectForProject.DataSource = dt_Subject
                    'Me.gvwSubjectForProject.DataBind()

                    'Me.gvwSubjectForProject.FindControl("gvChildGrid").DataSource =

dt_Subject

                    'CType(Me.gvwSubjectForProject.FindControl("gvChildGrid"),

GridView).DataBind() 'Me.gvwSubjectForProject.FindControl("gvChildGrid"). "Me.gvwSubjectForProject.FindControl( "gvChildGrid"). DataBind()

                    Dim gvChild As GridView = Me.gvwSubjectForProject.FindControl("gvChildGrid")
                    gvChild.DataSource = dt_Subject
                    gvChild.DataBind()
                End If
            End If
        End If

        Return True

    Catch ex As Exception
        Me.ShowErrorMessage("Error While Binding Grid", "....FillGrid")
        Return False
    End Try
End Function

HTML НЕСТАЦИОНАРНЫЙ ГРИДОВ

 <asp:Panel ID="pnlgvwSubjectStatus" runat="server" Style="max-height: 500px; overflow: auto;
            width: 60%;">
            <asp:GridView ID="gvwSubjectForProject" runat="server" AutoGenerateColumns="false"
                SkinID="grdViewSmlAutoSize" Width="70%" ShowFooter="true" AllowPaging="true"
                PageSize="1">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:ImageButton ID="imgbtnExpand" runat="server" ImageUrl="../images/Plus.gif" alt="Expand"
                                OnClientClick="imgbtnExpand_Click" />
                            <asp:HiddenField ID="hcStatus" runat="server" Value='<%# Eval("cStatus") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="Status" HeaderText="STATUS">
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Wrap="true" Width="40%" />
                        <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="true" Width="40%" />
                    </asp:BoundField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <div style="max-height: 300px; width: 100%; overflow: auto;
                                text-align: right;">
                                <%--<asp:Panel ID="pnlOrders" runat="server" Width="100%">--%>
                                    <asp:GridView ID="gvChildGrid" runat="server" AutoGenerateColumns="false" SkinID="grdViewSmlAutoSize">
                                        <Columns>
                                            <asp:BoundField ItemStyle-Width="40%" DataField="vSubjectID" HeaderText="SUBJECT ID">
                                                <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Wrap="true" Width="40%" />
                                                <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="true" Width="40%" />
                                            </asp:BoundField>
                                            <asp:BoundField ItemStyle-Width="60%" DataField="FullName" HeaderText="FULL NAME">
                                                <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Wrap="true" Width="60%" />
                                                <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="true" Width="60%" />
                                            </asp:BoundField>
                                        </Columns>
                                    </asp:GridView>
                                <%--</asp:Panel>--%>
                            </div>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="TotalSubject" HeaderText="TOTAL SUBJECTS">
                        <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Wrap="true" Width="50%" />
                        <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="true" Width="50%" />
                    </asp:BoundField>
                </Columns>
            </asp:GridView>
        </asp:Panel>

И еще одно, в HTML, когда дочернее gridview не отображается, его все еще заполняется при создании DOM. Я также хочу удалить это пустое пространство.

  • 0
    Пожалуйста, FindControl() весь свой код для метода события, в котором вы выполняете эти попытки FindControl() внутри. Кроме того, не могли бы вы опубликовать разметку для вложенных элементов управления видом сетки?
  • 0
    Пожалуйста, проверьте обновленный код.
Теги:
gridview
nested

1 ответ

0

Ваш опубликованный код не работает, потому что вы используете метод FindControl() во всех элементах управления родительской сеткой, а не в отдельной строке в элементе управления сеткой, например:

Найти детскую сетку в событии OnRowDataBound:

Sub ParentGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    ' Only look for child grid view in data rows, ignore header and footer rows
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim theChildGridView As GridView = DirectCast(e.Row.FindControl("gvChildGrid"), GridView)

        ' Do something with theChildGridView here

    End If
End Sub

Найти представление дочерней сетки путем циклического перехода по всем строкам в режиме управления сеткой родительского элемента:

For Each row As GridViewRow In ParentGridView.Rows
    ' Only look for child grid view in data rows, ignore header and footer rows
    If row.RowType = DataControlRowType.DataRow Then
        Dim theChildGridView As GridView = DirectCast(row.FindControl("gvChildGrid"), GridView)

        ' Do something with theChildGridView here
    End If
Next
  • 0
    Но, по крайней мере, должен быть какой-либо способ получить контроль над Child_gridview в Parent_gridview ... Даже imgbtnExpand не может быть найден во время отладки.
  • 0
    Хорошо. Я попробую так, но тем временем вы можете помочь мне решить мою другую проблему, о которой я говорил в последнем предложении моего вопроса?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню