Пользовательские элементы управления DataBind в Gridview - PullRequest
2 голосов
/ 26 января 2011

Я получил GridView в ASP.Net, в котором размещен пользовательский элемент управления:

<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<T>, заполненным пользовательскими классами 'Unit'. Каждый блок состоит из нескольких свойств для заполнения пользовательского контроля. (Пользовательский элемент управления содержит таблицу, а также некоторые метки и текстовые поля). Как мне этого добиться? Есть ли простой способ привязать каждый пользовательский элемент управления к соответствующему модулю?

Кстати, это мой способ имитировать "динамическое" поведение нескольких пользовательских контролей на странице. Если есть более простой способ, я хотел бы знать, как!

спасибо!

Ответы [ 2 ]

2 голосов
/ 26 января 2011

Вы должны обработать событие 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 вы должны приводить к типу пользовательского элемента управления. Вместо свойства «Текст метки» вам следует передать свойство, которое вы открыли для своего пользовательского элемента управления.

0 голосов
/ 26 января 2011

Вы можете создать открытые свойства в вашем usercontrol и присвоить им значения в событии OnRowDataBound gridview.

У меня есть сообщение, в котором описывается, как я обрабатываю динамические пользовательские контроли здесь

Надеюсь, это поможет!

...