需要将DataList与两个DataSource绑定

时间:2012-09-11 12:20:09

标签: c# asp.net

我在DataList中显示一些信息。 我可以将DataList绑定到两个DataSources。 因为我面临的情况是需要从两个不同的表中填充两行。以下是我想要做的事情。

<asp:DataList runat="server" id="myDataList">
  <ItemTemplate>
    <b><%# DataBinder.Eval(Container.DataItem, "Column from DataSource1") %></b>
    <br />
    <%# DataBinder.Eval(Container.DataItem, "Column from DataSource2") %>
  </ItemTemplate>
</asp:DataList>

4 个答案:

答案 0 :(得分:1)

无法将2个数据源绑定到单个项目。

理想情况下,从数据库中您必须使用JOINS获取数据,如果这不可能在您的服务器端代码中创建数据表,请从这两个数据源填充它,以便在自定义数据表中使用对两个数据源中的每一行进行一行,然后将该数据表与数据列表绑定。

DataTable customTable = new DataTable();
        customTable.Columns.Add("Column1");
        customTable.Columns.Add("Column2");

        DataRow drNew = null;
        foreach(DataRow dR in 1stDataSource)
        {
            foreach(DataRow dR1 in 2ndDataSource)
            {
                if(dR["ID"] == dR1["ID"])
                {
                    drNew = customTable.NewRow();
                    drNew["Column1"] = dR["Column1"];
                    drNew["Column2"] = dR1["Column2"];
                    customTable.Rows.Add(drNew);
                    break;
                }
            }
        }

        myDataList.DataSource = customTable;
        myDataList.DataBind();

答案 1 :(得分:0)

DataSource无法确定如何组合这两个表(内连接,交叉连接等)。你必须自己组合这些。
我也不能给你代码来组合它们因为我不知道你的两个表是如何相关的。

如果必须进行内部联接,只需将第二个数据源中的列添加到第一个表中,然后循环遍历行以填充表。

答案 2 :(得分:0)

最好的方法是创建一个数据表并从每个数据集导入行以创建一个大数据表,然后绑定它。

但是你不能从数据仓中更新,虽然在nunespascal提供的选项中,如果你已经完成了连接/交叉,你就不能从数据集做一个简单的更新。

答案 3 :(得分:0)

    ds.Tables[0].TableName = "Cats";
    ds.Tables[1].TableName = "Products";
    ds.Relations.Add("children", ds.Tables["Cats"].Columns["categoryno"],
                         ds.Tables["Products"].Columns["categoryno"]);
    YourDataList.DataSource = ds;
    YourDataList.DataBind();