首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将asp.net中继器控件动态绑定到数据源

如何将asp.net中继器控件动态绑定到数据源
EN

Stack Overflow用户
提问于 2014-06-03 10:40:19
回答 5查看 47.7K关注 0票数 3

我有一个页面有一个简单的下拉和中继器控件在page.on提交中继器控件绑定到datasource1,其中有3列。

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

代码语言:javascript
运行
复制
<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>

同一中继器是否可以动态绑定到异构数据源?如何在运行时指定标头模板和项模板?这个场景能否通过一个中继器控制和多个异构数据源来实现?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-03 13:13:17

下面的代码会对你有帮助。

代码语言:javascript
运行
复制
<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();
        }
    }

或者以其他方式使用两个不同的用户control.First用户控件包含repeater1,第二个包含重复2,然后在后面的代码处动态地将这些中继器添加到页面中

票数 8
EN

Stack Overflow用户

发布于 2015-10-14 13:20:13

你可以这样用-

代码语言:javascript
运行
复制
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
   using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString))
   {
      SqlCommand cmd = new SqlCommand("select * from Customers", con);
      cmd.CommandType = CommandType.StoredProcedure;
      SqlDataAdapter adpt = new SqlDataAdapter(cmd);
      DataTable dt = new DataTable();
      adpt.Fill(dt);
      repeaterObj.DataSource = dt;
      repeaterObj.DataBind();
      cmd.Dispose();
    }
 }
票数 3
EN

Stack Overflow用户

发布于 2014-06-03 13:11:48

尝试在下拉列表中设置AutoPostback=true。然后,在代码背后安装程序上设置一个"selectedindexchanged“事件处理程序来读取值并相应地设置数据源,类似于:

代码语言:javascript
运行
复制
repeater1.DataSource=<yourdatasource>
repeater1.DataBind()

如果您的数据源总是在演示文稿中使用相同的列,那么这不应该是一个问题。如果您的数据源在它们返回的数据列中会有所不同,那么Kashif在您的问题中的评论可能会对您有所帮助。否则,您只需填写上面的逻辑,将中继器的Datasource属性设置为任何数据源.

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24013041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档