大家好:
我现在数据库里有两张表,两张表是带外键关联的.
我现在把这2个表都读到DataSet里去了,分别就是table[0]和table[1]我现在想把这2张表的关联查询找出来,但不想通过数据库,可不可以通过dataset来实现,怎么实现呢?谢谢

解决方案 »

  1.   

    把这2张表的关联查询找出来,但不想通过数据库,可不可以通过dataset来实现,怎么实现呢?
    :
    关联查询出来后,也是一张表,不能同时填充两张表.
    不要对用DataSet中的两张表建立关系,当更新主表时,会抛异常...
      

  2.   

    简单点就把ds给GridView1 、GridView2  一看就知道了 哈哈 ,数学中这叫画图法
    这里该叫视图吧 ?DefaultView ~@_@~
      

  3.   

    select * from ds.Tables[0],ds.Tables[1]  where ~!!= !`~1
      

  4.   

    DataRelation
    我用了 可是出来的答应不对
    比如我有个员工表和一个部门表
    我有3个部门,很多员工
    我用DataRelation
    只出了一个部门的所有员工 其他的没出来
    我想查出每个员工所属部门的名字,但现在只出了一个部门的所有员工 其他的出不来
      

  5.   

    DataSet本身就提供了Relations属性。DataSet.Relations.Add("table1的列","table2的列")
      

  6.   

    我用了DataSet.Relations.Add("table1的列","table2的列")
    ,问题是出不来我需要的结果集
      

  7.   

    举例说明:如果id是关联列,那么,以下select可以把相同的都查出来.DataRow[] = DataSet.Tables[0].Select("Parent.id = Child.id")你是这样查找的吗?
      

  8.   

    给个Demousing System;
    using System.Data;           
    using System.Data.SqlClient;class DataRelationDemo
    {
       public static void Main() 
       {
          SqlConnection cn = new SqlConnection(
             @"Data Source=(local);uid=sa;password=sa;Initial Catalog=northwind");      SqlDataAdapter da = new SqlDataAdapter( 
             "SELECT CustomerID, CompanyName FROM Customers", cn);      SqlCommandBuilder cb = new SqlCommandBuilder(da);      DataSet ds= new DataSet();      SqlDataAdapter custAdapter = new SqlDataAdapter(
             "SELECT * FROM Customers", cn);
          SqlDataAdapter orderAdapter = new SqlDataAdapter(
             "SELECT * FROM Orders", cn);
          custAdapter.Fill(ds, "Customers");
          orderAdapter.Fill(ds, "Orders");      DataRelation custOrderRel = ds.Relations.Add("CustOrders",
             ds.Tables["Customers"].Columns["CustomerID"],
             ds.Tables["Orders"].Columns["CustomerID"]);      foreach (DataRow custRow in ds.Tables["Customers"].Rows)
          {
             Console.WriteLine("Customer ID: " + custRow["CustomerID"] + 
                " Name: " + custRow["CompanyName"]);
             foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel))
             {
                Console.WriteLine("  Order ID: " + orderRow["OrderID"]);
             }
          }
       }
    }
      

  9.   

    使用 DataRelation 在表之间建立关系DEMO:<%@ Page Language="C#" %>
    <%@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">    void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) {  
                // 首次加载数据一定要放在 !IsPostBack 内,
                // 避免回发的时候再次绑定数据,覆盖复选框状态
                LoadProductData();            
            }
        }    void btnSubmit_Click(object sender, EventArgs e)
        {
            ArrayList selectedCategoryIdList = new ArrayList();
            ArrayList selectedCategoryNameList = new ArrayList();
            ArrayList selectedProductIdList = new ArrayList();
            foreach (DataListItem item in dlstProCat.Items) {
                CheckBox chkCat = item.FindControl("chkCat") as CheckBox;
                if (chkCat != null && chkCat.Checked) {
                    selectedCategoryIdList.Add((int)dlstProCat.DataKeys[item.ItemIndex]);
                    Label lblCatName = item.FindControl("lblCatName") as Label;
                    selectedCategoryNameList.Add(lblCatName.Text);
                }
                DataList dlstPro = item.FindControl("dlstPro") as DataList;
                if (dlstPro != null) {
                    // the same to dlstProCat
                }
            }
            
            // displays info
            grdInfo.DataSource = selectedCategoryIdList;
            grdInfo.DataBind();        grdInfo2.DataSource = selectedCategoryNameList;
            grdInfo2.DataBind();
        }       /// <summary>
        /// DataList 的每一项执行数据绑定之后调用事件处理程序,
        /// 在程序内部实现绑定嵌套的 DataList
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void dlstProCat_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            // e.Item.DataItem 公开绑定到 DataList 当前项的数据,
            // 这里为 包含 Category 数据的 DataRowView 对象, 因为我们提供的数据源为 DataTable
            DataRowView drv = e.Item.DataItem as DataRowView;
            if(drv == null) return;        // 查找嵌套的 DataList
            DataList dlstPro = e.Item.FindControl("dlstPro") as DataList;
            if (dlstPro == null) return;        // 我们已经将与Category相关Product全部加载到DataSet中,
            // 并建立了 DataRelation,因此这里直接反向获取 Product DataTable,
            // 并使用 DataView 过滤目标数据
            DataRow dr = drv.Row;        
            DataView dvPro = dr.Table.ChildRelations["ProCatShip"].ChildTable.DefaultView;
            dvPro.RowFilter = "CategoryId = " + dr["CategoryID"].ToString();        dlstPro.DataSource = dvPro;
            dlstPro.DataBind();
        }    void LoadProductData()
        {
            DataSet ds = CreateProductCategoryDataSet();
            dlstProCat.DataSource = ds.Tables["Categories"];
            dlstProCat.DataBind();        
        }      #region sample data
        
        static DataSet CreateProductCategoryDataSet()
        {
            DataSet ds = new DataSet("ProductCategorySet");
            DataTable dtPro = CreateProductTable();
            DataTable dtCat = CreateCategoryTable();
            ds.Tables.Add(dtPro);
            ds.Tables.Add(dtCat);
            ds.Relations.Add("ProCatShip", dtCat.Columns["CategoryID"], dtPro.Columns["CategoryID"]);        return ds;
        }    static DataTable CreateProductTable()
        {
            DataTable tbl = new DataTable("Products");        tbl.Columns.Add("ProductID", typeof(int));
            tbl.Columns.Add("ProductName", typeof(string));
            tbl.Columns.Add("CategoryID", typeof(int));
            DataRow row = tbl.NewRow();
            row[0] = 1;
            row[1] = "Chai";
            row[2] = 1;
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 2;
            row[1] = "Chang";
            row[2] = 1;
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 3;
            row[1] = "Aniseed Syrup";
            row[2] = 2;
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 4;
            row[1] = "Chef Anton's Cajun Seasoning";
            row[2] = 2;
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 5;
            row[1] = "Chef Anton's Gumbo Mix";
            row[2] = 2;
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 47;
            row[1] = "Zaanse koeken";
            row[2] = 3;
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 48;
            row[1] = "Chocolade";
            row[2] = 3;
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 49;
            row[1] = "Maxilaku";
            row[2] = 3;
            tbl.Rows.Add(row);        return tbl;
        }    public static DataTable CreateCategoryTable()
        {
            DataTable tbl = new DataTable("Categories");        tbl.Columns.Add("CategoryID", typeof(int));
            tbl.Columns.Add("CategoryName", typeof(string));
            DataRow row = tbl.NewRow();
            row[0] = 1;
            row[1] = "Beverages";
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 2;
            row[1] = "Condiments";
            tbl.Rows.Add(row);        row = tbl.NewRow();
            row[0] = 3;
            row[1] = "Confections";
            tbl.Rows.Add(row);        return tbl;
        }    #endregion
        
    </script>
      

  10.   

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Nested DataList</title>
        <script type="text/javascript">
        function chkCatPro_Clicked(sender, suredId1, suredId2)
        {
            //debugger;
            var cnt = sender.parentElement.parentElement.parentElement.parentElement;
            var nptArr = cnt.getElementsByTagName("input");
            for(var i = 0; i < nptArr.length; i++) {
                if(nptArr[i].type == 'checkbox' && 
                    (nptArr[i].id.indexOf(suredId1) > -1 || nptArr[i].id.indexOf(suredId2) > -1)) {
                    nptArr[i].checked = sender.checked;
                }
            }
        }    
        
        // 有可能还包含其他用途的 checkbox,故提供
        // 参数 suredId 确保关联的是正确的 checkbox,
        function chkCat_Clicked(sender, suredId)
        {   
            var cnt = sender.parentElement.parentElement;
            var nptArr = cnt.getElementsByTagName("input");
            for(var i = 0; i < nptArr.length; i++) {
                if(nptArr[i].type == 'checkbox' && nptArr[i].id.indexOf(suredId) > -1) {
                    nptArr[i].checked = sender.checked;
                }
            }
        }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DataList ID="dlstProCat" DataKeyField="CategoryID" runat="server" OnItemDataBound="dlstProCat_ItemDataBound" CellPadding="4" ForeColor="#333333">
                <HeaderTemplate>
                    <asp:CheckBox ID="chkCatPro" onclick="chkCatPro_Clicked(this, 'chkCat', 'chkPro')" ToolTip="Check All" runat="server" Text="Categories" />                    
                </HeaderTemplate>
                <ItemTemplate>                
                    <asp:CheckBox ID="chkCat" onclick="chkCat_Clicked(this, 'chkPro')" ToolTip="Check All the Products Of this Category" runat="server" />                    
                        <asp:Label ID="lblCatName" runat="server" Text='<%# Eval("CategoryName") %>'></asp:Label>
                        <div style="padding-left:20px;">
                        <asp:DataList ID="dlstPro" DataKeyField="ProductID" runat="server" CellPadding="4" ForeColor="#333333" >
                            <HeaderTemplate>Products</HeaderTemplate>
                            <ItemTemplate>
                                <asp:CheckBox ID="chkPro" runat="server" />
                                <asp:Label ID="lblProName" runat="server" Text='<%# Eval("ProductName") %>'></asp:Label>
                            </ItemTemplate>
                            <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                            <SelectedItemStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
                            <AlternatingItemStyle BackColor="White" />
                            <ItemStyle BackColor="#E3EAEB" />
                            <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                        </asp:DataList>
                        </div>
                </ItemTemplate>
                <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <SelectedItemStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                <AlternatingItemStyle BackColor="White" ForeColor="#284775" />
                <ItemStyle BackColor="#F7F6F3" ForeColor="#333333" />
                <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            </asp:DataList>         
            <asp:Button ID="btnSubmit"  Text="获取选中信息" runat="server" OnClick="btnSubmit_Click" />
           
            <div style="float:left">
            <asp:GridView ID="grdInfo" runat="server" AutoGenerateColumns="false">
                <Columns>                
                    <asp:TemplateField HeaderText="CategoryID"  >
                        <ItemTemplate><%# Container.DataItem %></ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            </div>
            <div style="float:left">
            <asp:GridView ID="grdInfo2" runat="server">            
            </asp:GridView>
            </div>
        </div>
        </form>
    </body>
    </html>