用DataRelation給多個DataTable建立關係並顯示到TreeView,datarelation

來源:互聯網
上載者:User

用DataRelation給多個DataTable建立關係並顯示到TreeView,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);//將子節點添加到上以及子節點裡;            }        }    }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.