用DataRelation給多個DataTable建立關係,然後綁定到TreeView顯示出來

包含相關數據表的數據集使用 DataRelation 對象表示表之間的父/子關係並互相返回相關記錄。使用“數據源配置嚮導”或“數據集設計器”將相關表添加到數據集可爲您創建和配置 DataRelation 對象。有關返回相關記錄的更多信息,請參見如何:訪問相關數據表中的記錄。有關創建數據關係的信息,請參見如何:使用數據集設計器創建 DataRelation

DataRelation 對象執行兩種功能:

  • 它可使與正使用的記錄相關的記錄可用。如果在父記錄 (GetChildRows) 中,則它提供子記錄;如果正使用子記錄 (GetParentRow),則它提供父記錄。

  • 它可強制約束的引用完整性,如刪除父記錄時刪除相關的子記錄。

瞭解真正的聯接與 DataRelation 對象功能之間的差異很重要。在真正的聯接中,從父表和子表獲取記錄並將其放入單個的平面記錄集。當使用 DataRelation 對象時,不創建新記錄集。而關係跟蹤表之間的關係並使父記錄和子記錄保持同步。

 

public partial class DataRelationDemo : System.Web.UI.Page
{
    private SqlConnection conn;
    private SqlDataAdapter dad;
    private DataSet ds;
    protected void Page_Load(object sender, EventArgs e)
    {
        //連接數據庫pubs,且把三張表填充到DataSet裏;
        this.conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["pubsConnectionString"].ToString());
        this.dad = new SqlDataAdapter("select job_id,job_desc from jobs select pub_id,pub_name from publishers select pub_id,job_id,fname,lname from employee", conn);
        this.ds=new DataSet();
        this.dad.Fill(ds);

        //給三張表建立不同的關係;
        //通過job_id給employee和jobs建立主外間關係;注意主表(父表)在前,從表(子表)在後,注意參數的順序
        DataRelation relationjob = new DataRelation("empjob", ds.Tables[0].Columns["job_id"], ds.Tables[2].Columns["job_id"]);
        //添加到DataSet裏的Relations中;
        ds.Relations.Add(relationjob);
        //通過pub_id給employee和publishers建立主外間關係;注意主表(父表)在前,從表(子表)在後,注意參數的順序
        DataRelation relationpub = new DataRelation("emppub", ds.Tables[1].Columns["pub_id"], ds.Tables[2].Columns["pub_id"]);
        //添加到DataSet裏的Relations中;
        ds.Relations.Add(relationpub);

        //循環遍力主表(父表),
        foreach (DataRow drpub in ds.Tables[1].Rows) {

            //建立父節點
            TreeNode nodepart = new TreeNode();
            nodepart.Text = drpub["pub_name"].ToString();
            this.TreeView1.Nodes.Add(nodepart);//將父節點添加到樹控件;

            //在循環遍力主表所對應的從表(子表),用GetChildRows(relationpub)得到的是一個DataRow數組;
            foreach (DataRow dremp in drpub.GetChildRows(relationpub)) {

                //在建立子節點;
                TreeNode nodechild = new TreeNode();
                nodechild.Text = dremp["fname"].ToString() + " " + dremp["lname"].ToString();
                nodepart.ChildNodes.Add(nodechild);//將子節點添加到父節點裏;

                //通過dremp.GetParentRow(relationjob)這個方法得到從表(子表)所對應的主表(父表),而返回的是一行DataRow數據;
                //因此不需要用循環遍歷;
               DataRow dr=dremp.GetParentRow(relationjob);

               ////在建立子節點;
               TreeNode nodechch = new TreeNode();
               nodechch.Text = dr["job_desc"].ToString();
               nodechild.ChildNodes.Add(nodechch);//將子節點添加到上以及子節點裏;

            }
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章