Gridview 中的 DataBind 用户控件

发布于 2024-10-14 12:01:46 字数 918 浏览 1 评论 0原文

我在 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 绑定到一个充满自定义“Unit”类的 List。每个单元都包含多个属性来填充用户控件。 (用户控件包含一个表格、一些标签和文本框)。 我怎样才能实现这个目标?有没有一种简单的方法将每个用户控件绑定到适当的单元?

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

谢谢你!

I got a GridView in ASP.Net in which a user control is placed:

<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>

I bind the GridView to a List<T> filled with custom 'Unit' Classes. Each Unit consists of several properties to fill the usercontrol. (The user control holds a table, and some labels and textboxes).
How can I achieve this? Is there a simple way to bind each usercontrol to the appropriate Unit?

By the way, this is my way to mimic a "dynamic" behavior of multiple usercontrols on a page. If there's a more simple way, I would like to know how!

thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

把人绕傻吧 2024-10-21 12:01:46

您应该处理 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。您应该分配从用户控件公开的属性,而不是标签的 Text 属性。

You should handle the OnRowDataBound event then use FindControl and the DataItem property on the event argument to extract the data you are binding to. You should expose properties on the user control to assign values to. Here is an example:

<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();
    }
}

Instead of int you should cast to your specific datatype and instead of Label you should cast to your user control type. Instead of the Label's Text property you should assing to the property you've exposed from your user control.

故事↓在人 2024-10-21 12:01:46

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

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

希望有所帮助!

You could create public properties on your usercontrol and assign them values in the gridview's OnRowDataBound event.

I have a post that outlines how I handle dynamic usercontrols here

Hope that helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文