TreeView 바 인 딩 데이터베이스 자세히 알 아 보기

7829 단어 TreeView데이터
많은 응용 프로그램 들 이 TreeView 를 사용 하여 조직 기 구 를 표시 해 야 합 니 다.다음은 TreeView 가 데이터베이스 와 어떻게 연결 하 는 지 보 여 줍 니 다.
데이터베이스 구 조 는 다음 과 같다.
id(guid)                                                                       pid(guid)                                           name
18a83618-8751-47ef-91a0-e2dcde42bb71                                                                               **회사 명
c775c004-48ed-4664-8b0c-8fd26fea5f4e      18a83618-8751-47ef-91a0-e2dcde42bb71                  A 부서
a43696f0-a906-4b4a-8abf-a01fb7d54daf      c775c004-48ed-4664-8b0c-8fd26fea5f4e                   A 부서->1 팀
0d7fb83a-c056-482e-800b-52e20c74791b     c775c004-48ed-4664-8b0c-8fd26fea5f4e                   A 부서->2 팀
de28685a-aaff-4876-abe1-bb003d17db64     18a83618-8751-47ef-91a0-e2dcde42bb71                 B 부서
TreeView 에 연결 하 는 최종 효 과 는 다음 그림 과 같 습 니 다:

1.TreeView 컨트롤 새로 만 들 기

귀속
2.1  전통 적 인 방법(통 하지 않 음)

2.2 정확 한 방법:스스로 재 귀적 인 방법 을 구축한다.
2.2.1 재 귀 는 바로 방법의 중복 호출 이다.다음은 제 가 정리 한 두 가지 방법 입 니 다.초보 자 에 게 그 중의 코드 를 모 르 더 라 도 괜 찮 습 니 다.직접 복사 해서 사용 하면 됩 니 다.

    #region   TreeView
    /// <summary>
    ///   TreeView(  TreeNode)
    /// </summary>
    /// <param name="p_Node">TreeNode(TreeView     )</param>
    /// <param name="pid_val"> id  </param>
    /// <param name="id">    id    </param>
    /// <param name="pid">     id    </param>
    /// <param name="text">          </param>
    protected void Bind_Tv(DataTable dt,TreeNode p_Node, string pid_val, string id, string pid, string text)
    {
      DataView dv = new DataView(dt);// DataTable  DataView ,       
      TreeNode tn;//  TreeView   (TreeNode),              
      //        ,   id  ,    “ id   is null”     ,    “ id  = id   ”     
      string filter = string.IsNullOrEmpty(pid_val) ? pid+" is null" : string.Format(pid+"='{0}'", pid_val);
      dv.RowFilter = filter;//  DataView       ,      id     
      foreach (DataRowView row in dv)
      {
        tn = new TreeNode();//       (   :    )
        if (p_Node==null)//      
        {
          tn.Value = row[id].ToString();//   Value ,       id 
          tn.Text = row[text].ToString();//   Text,       
          TreeView1.Nodes.Add(tn);//       TreeView 
          Bind_Tv(dt,tn, tn.Value, id, pid, text);//  (        ,         )
        }
        else//       
        {
          tn.Value = row[id].ToString();//  Value 
          tn.Text = row[text].ToString();//  Text 
          p_Node.ChildNodes.Add(tn);//           
          Bind_Tv(dt,tn, tn.Value, id, pid, text);//  
        }
      }
    }
    
    /// <summary>
    ///   TreeView(  TreeNodeCollection)
    /// </summary>
    /// <param name="tnc">TreeNodeCollection(TreeView     )</param>
    /// <param name="pid_val"> id  </param>
    /// <param name="id">    id    </param>
    /// <param name="pid">     id    </param>
    /// <param name="text">          </param>
    private void Bind_Tv(DataTable dt,TreeNodeCollection tnc, string pid_val, string id, string pid, string text)
    {
      DataView dv = new DataView(dt);// DataTable  DataView ,       
      TreeNode tn;//  TreeView   (TreeNode),              
      //        ,   id  ,    “ id   is null”     ,    “ id  = id   ”     
      string filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val);
      dv.RowFilter = filter;//  DataView       ,      id     
      foreach (DataRowView drv in dv)
      {
        tn = new TreeNode();//       (   :    )
        tn.Value = drv[id].ToString();//   Value ,       id 
        tn.Text = drv[text].ToString();//   Text,       
        tnc.Add(tn);//       TreeNodeCollection(    ) 
        Bind_Tv(dt, tn.ChildNodes, tn.Value, id, pid, text);//  (        ,         )
      }
    }
    #endregion
2.2.2 호출

2.2.3 데이터 에 대하 여
―테스트 데이터(역할:실제 데이터베이스 시트 를 모 의 하 는 것).이 방법의 역할 은 하나의 표를 만 드 는 것 이다.표 에는 세 개의 필드 가 있 는데 각각 id,부모 id,이름 이 고 그 다음 에 그 안에 데 이 터 를 삽입 하 는 것 이다. 

 private DataTable Test_Table()
    {
      DataTable dt = new DataTable();
      DataRow dr;
      dt.Columns.Add(new DataColumn("id", typeof(Guid)));//id    guid
      dt.Columns.Add(new DataColumn("parent_id", typeof(Guid)));// id    guid
      dt.Columns.Add(new DataColumn("name", typeof(string)));//      string
      //         
      dr = dt.NewRow();
      var node0=dr[0] = Guid.NewGuid();
      dr[1] = DBNull.Value;
      dr[2] = "**   ";
      dt.Rows.Add(dr);
      //        
      string[] department = { "A  ", "B  ", "C  "};
      for (int i = 0; i < department.Length; i++) {
        dr = dt.NewRow();
        var node1=dr[0] = Guid.NewGuid();
        dr[1] = node0;//(    )       
        dr[2] = department[i];
        dt.Rows.Add(dr);
        //        
        for (int j = 1; j < 4; j++)
        {
          dr = dt.NewRow();
          dr[0] = Guid.NewGuid();
          dr[1] = node1;
          dr[2] = j+"  ";
          dt.Rows.Add(dr);
        }
      }
      return dt;
    }
-실제 데 이 터 는 데이터베이스 에 id,부모 id,이름 으로 세 개의 필드 를 만 든 다음 에 그 안에 데 이 터 를 삽입 해 야 합 니 다.주의해 야 할 것 은 첫 번 째 줄 데이터 의 부모 id 가 비어 있어 야 한 다 는 것 입 니 다.
       그리고 다음 과 같은 방법 으로 데이터베이스 에 있 는 데 이 터 를 꺼 냅 니 다.    

 /// <summary>
    ///         ,  DataTable
    /// </summary>
    /// <param name="str_Con">     </param>
    /// <param name="str_Cmd">sql  </param>
    /// <returns></returns>
    private DataTable exe_Table(string str_Con,string str_Cmd)
    {
      DataSet ds = new DataSet();
      using (OracleConnection conn = new OracleConnection(str_Con))
      {
        using (OracleDataAdapter oda = new OracleDataAdapter(str_Cmd, conn))
        {
          conn.Open();
          oda.Fill(ds);
        }
      }
      return ds.Tables[0];
    }
마지막 에!IsPost Back 호출

 if (!IsPostBack)
      {
        Bind_Tv(exe_Table("     ", "select * from  "), TreeView1.Nodes, null, "id  ", " id  ", "    ");
      }
 
이상 은 본 고의 모든 내용 입 니 다.여러분 이 TreeView 바 인 딩 데이터 베 이 스 를 능숙 하 게 파악 하 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기