【问题标题】:DataBind User Controls in GridviewGridview 中的 DataBind 用户控件
【发布时间】:2011-06-15 18:46:39
【问题描述】:

我在 ASP.Net 中有一个 GridView,其中放置了一个用户控件:

<asp:GridView ID="GVWunitcollection"
        CssClass="gridview"
        runat="server"
        ShowHeader="false"
        ShowFooter="false"
        AutoGenerateColumns="False">
        <HeaderStyle CssClass="headerstyle" />
        <RowStyle CssClass="rowstyle row" />
        <FooterStyle CssClass="rowstyle row" />
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <uc:Unit ID="UNTcol" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
</asp:GridView>

我将 GridView 绑定到一个List&lt;T&gt;,其中填充了自定义“单元”类。每个 Unit 包含几个属性来填充用户控件。 (用户控件包含一个表格,以及一些标签和文本框)。 我怎样才能做到这一点?有没有一种简单的方法可以将每个用户控件绑定到相应的单元?

顺便说一句,这是我模仿页面上多个用户控件的“动态”行为的方式。如果有更简单的方法,我想知道如何!

谢谢!

【问题讨论】:

    标签: c# asp.net user-controls dynamic data-binding


    【解决方案1】:

    您应该处理 OnRowDataBound 事件,然后使用 FindControl 和事件参数上的 DataItem 属性来提取您要绑定的数据。您应该在用户控件上公开属性以分配值。这是一个例子:

    <asp:GridView ID="gvTest" runat="server" EnableViewState="false" 
    OnRowDataBound="gvTest_RowDataBound" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="lblTest" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    

    
    protected void Page_Load(object sender, EventArgs e)
    {
        gvTest.DataSource = new[] { 1, 2, 3, 4 };
        gvTest.DataBind();
    }
    
    protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            int item = (int)e.Row.DataItem;
            Label lblTest = (Label)e.Row.FindControl("lblTest");
            lblTest.Text = item.ToString();
        }
    }
    

    您应该转换为您的特定数据类型而不是 int,而不是 Label 您应该转换为您的用户控件类型。而不是 Label 的 Text 属性,您应该分配给您从用户控件中公开的属性。

    【讨论】:

      【解决方案2】:

      您可以在用户控件上创建公共属性并在 gridview 的 OnRowDataBound 事件中为其分配值。

      我有一篇文章概述了我如何处理动态用户控件here

      希望有帮助!

      【讨论】:

        猜你喜欢
        • 2011-04-17
        • 2014-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多