Ссылка на повторитель в виде сетки на элементе данных - PullRequest
0 голосов
/ 19 июля 2011

У меня есть asp:DataGrid, в котором есть asp:Gridview, и в нем много вложенных asp:Repeater, и я пытаюсь сослаться на вложенный ретранслятор из моей OnItemDataBound функции

Мой код похож на этот

<asp:Datagrid runat="server" id="DataGrid1" OnItemDataBound="ItemDB" AutoGenerateColumns="false" Gridlines="None">
    <Columns>
        <asp:TemplateColumn HeaderText="">
            <ItemTemplate>
                <asp:GridView id="GridView1" runat="server" AutoGenerateColumns="false">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:Repeater id="Repeater1" runat="server">
                                    <ItemTemplate>
                                        <p>Test</p>
                                    </ItemTemplate>
                                </asp:Repeater>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:Datagrid>

немного сложно, но с этим я и работаю.

В моей команде ItemDB у меня есть

Sub ItemDB(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)

    Dim drv As DataRowView = CType(e.Item.DataItem, DataRowView)
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then


        If CType(e.Item.FindControl("GridView1"), GridView).Visible = True Then
            CType(e.Item.FindControl("Repeater"), GridView).Visible = True
        End If
    End If
End Sub

но я получаю ошибку

Ссылка на объект не установлена ​​для экземпляра объекта

и я предполагаю, что это потому, что я ссылаюсь на Repeater в GridView

Есть идеи, как правильно ссылаться на это?

Этот код может быть не самым простым способом сделать это, но я взял на себя чужую работу и мне нужно быстрое исправление, прежде чем перекодировать все это

Заранее спасибо

1 Ответ

1 голос
/ 19 июля 2011

Вам нужно найти Gridview в шаблоне, а затем зарегистрировать событие для его RowDataBound, а найти ретранслятор в обработчике событий. Вы должны использовать событие OnItemCreated для регистрации событий OnItemDataBound, но проще всего было бы указать методы в вашем .aspx:

<asp:GridView id="GridView1" runat="server" AutoGenerateColumns="false" onrowdatabound="GridView1_RowDataBound">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:Repeater id="Repeater1" runat=""server"
                                     onitemdatabound="Repeater1_ItemDataBound">
                                    <ItemTemplate>
                                        <p>Test</p>
                                    </ItemTemplate>
                                </asp:Repeater>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

и в вашем коде:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //you could find the repeater in the gridview's itemtemplate here
    // to the BulletedList
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Repeater rpt = (Repeater)e.Row.FindControl("Repeater1");
        rpt.Visible = false;

    }
}
    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
         //you could find controls in the repeater's itemtemplate here.
    }
...