2015-10-05 95 views
0

我正在使用C1Flexgrid,我需要在此网格中创建父子关系。但孩子的细节需要显示在同一个网格(没有其他网格),当我点击+展开应该发生,反之亦然。如何在C1flexgrid中制作父母子女关系

我写了下面的代码,我有一个与父母和孩子有关的数据表中的列。如果它是父母,那么我使它1其他0.

当我尝试使用此代码。因为它是父节点,所以不应该是r的子节点。

请帮我解决这个问题。

private void Form3_Load(object sender, EventArgs e) 
     { 
      DataTable dt = new DataTable("customers"); 
      dt.Columns.Add("abc"); 
      dt.Columns.Add("ddd"); 
      dt.Columns.Add("eee"); 
      dt.Columns.Add("parent"); 

      var r = dt.NewRow(); 
      r["abc"] = "11"; 
      r["ddd"] = "12"; 
      r["eee"] = "13"; 
      r["parent"] = "1"; 



      var r1 = dt.NewRow(); 

      r1["ddd"] = "12"; 
      r1["eee"] = "14"; 
      r1["parent"] = "0"; 

      var r2 = dt.NewRow(); 
      r2["abc"] = "11"; 
      r2["ddd"] = "1222"; 
      r2["eee"] = "14"; 
      r2["parent"] = "1"; 

      var rr32 = dt.NewRow(); 
      rr32["abc"] = "11"; 
      rr32["ddd"] = "1222"; 
      rr32["eee"] = "14"; 
      rr32["parent"] = "0"; 

      dt.Rows.Add(r); 
      dt.Rows.Add(r1); 
      dt.Rows.Add(r2); 
      dt.Rows.Add(rr32); 


      grid1.DataSource = dt; 


      GroupBy("parent", 1); 

      // show outline tree 
      grid1.Tree.Column = 2; 

      // autosize to accommodate tree 
      grid1.AutoSizeCol(grid1.Tree.Column); 
      grid1.Tree.Show(1); 
     } 

     void GroupBy(string columnName, int level) 
     { 
      object current = null; 
      for (int r = grid1.Rows.Fixed; r < grid1.Rows.Count; r++) 
      { 
       if (!grid1.Rows[r].IsNode) 
       { 
        var value = grid1[r, columnName]; 
        string value2 = grid1[r, "parent"].ToString(); 

        if (!object.Equals(value, current)) 
        { 
         // value changed: insert node, apply style 
         if (value2.Equals("0")) 
         { 
          grid1.Rows.InsertNode(r, level); 
          grid1.Rows[r].Style = _nodeStyle[Math.Min(level, _nodeStyle.Length - 1)]; 
          r++; 

         } 






         // show group name in first scrollable column 
         //grid1[r, grid1.Cols.Fixed+1] = value; 

         // update current value 
         current = value; 
        } 
       } 
      } 
     } 
    } 

回答

0

您的代码几乎在那里,我操纵了GroupBy方法来适应您的需要。它解决了您当前的需求,但您必须自己处理排序和其他网格功能。

希望这会有所帮助!

void GroupBy(string columnName, int level) 
    { 
     object current = null; 
     for (int r = grid1.Rows.Fixed; r < grid1.Rows.Count; r++) 
     { 
      if (!grid1.Rows[r].IsNode) 
      { 
       var value = grid1[r, columnName]; 
       if (!object.Equals(value, current)) 
       { 
        // value changed: insert node, apply style 
        grid1.Rows.InsertNode(r, level); 
        grid1.Rows[r].Style = _nodeStyle[Math.Min(level, _nodeStyle.Length - 1)]; 

        // show group name in first scrollable column 
        Row row = grid1.Rows[r + 1]; 


        for (int i = 0; i < grid1.Cols.Count; i++) 
        { 
         grid1[r, i] = row[i]; 
        } 

        grid1.Rows[r + 1].Visible = false; 
        r++; 
        // update current value 
        current = value; 
       } 
      } 
     } 
    } 
+0

谢谢Bedasa它为我工作!你让我今天一整天都感觉很好! – Akhilesh