【问题标题】:Reference a repeater within a gridview on item databound在项目数据绑定的网格视图中引用转发器
【发布时间】:2011-10-08 10:19:06
【问题描述】:

我有一个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

但我得到了错误

对象引用未设置为对象的实例

我猜这是因为我在 GridView 中引用了中继器

任何想法如何正确引用它?

这段代码可能不是最简单的方法,但我已经接管了别人的工作,需要快速修复,然后再重新编码

提前致谢

【问题讨论】:

    标签: asp.net vb.net gridview datagrid repeater


    【解决方案1】:

    您必须在模板中找到 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.
        }
    

    【讨论】:

    • 感谢到目前为止的帮助 - 一旦我在 GridView 行数据绑定函数中,我如何在我的 DataGrid 中引用某些内容?
    • 在上面的 GridView1_RowDataBound 事件处理程序中添加了一个示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多