我在 page.on 中有一个带有简单下拉列表和转发器控件的页面。提交转发器控件绑定(bind)到具有 3 列的 datasource1。

现在我的要求是如果我选择 option2 ,它应该绑定(bind)到包含 4 列的 datasource2 。

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<HeaderTemplate>
    <tr>
        <th align="left">Header1</th>
        <th align="left">Header3</th>
        <th align="left">Header2</th>
    </tr>
</HeaderTemplate>
<ItemTemplate>
    <tr>
        <td>
            <asp:Label ID="Header1" runat="server" /></td>
        <td>
            <asp:Label ID="Header3" runat="server" /></td>
        <td>
            <asp:Label ID="Header2" runat="server" /></td>
    </tr>
</ItemTemplate>

同一个repeater可以动态绑定(bind)到异构数据源吗?如何在运行时指定header模板和item模板?是否可以仅使用一个中继器控件和多个异构数据源来实现此场景?

最佳答案

感觉下面的代码会帮助你。

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
    <HeaderTemplate>
        <tr class="">
            <asp:Repeater ID="Header1" runat="server">
                <ItemTemplate>
                    <th align="left"><%# Container.DataItem %>
                    </th>
                </ItemTemplate>
            </asp:Repeater>
        </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr class="">
            <asp:Repeater ID="Item1" runat="server">
                <ItemTemplate>
                    <td><%# Container.DataItem %>
                    </td>
                </ItemTemplate>
            </asp:Repeater>
        </tr>
    </ItemTemplate>
</asp:Repeater>


protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Header)
        {
            Repeater headerRepeater = e.Item.FindControl("Header1") as Repeater;
            headerRepeater.DataSource = dt.Columns;
            headerRepeater.DataBind();
        }

       if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater columnRepeater = e.Item.FindControl("Item1") as Repeater;
            var row = e.Item.DataItem as System.Data.DataRowView;
            columnRepeater.DataSource = row.Row.ItemArray;
            columnRepeater.DataBind();
        }
    }

或以其他方式使用 2 个不同的用户控件。第一个用户控件包含转发器 1,第二个包含转发器 2。然后将这些转发器动态添加到您的页面,在代码后面

关于c# - 如何将asp.net转发器控件动态绑定(bind)到数据源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24013041/

10-11 21:35