2015-10-05 7 views
0

Я использую C1Flexgrid, и мне нужно создать отношение родительского дочернего элемента в этой сетке. Но детальные детали должны отображаться в одной и той же сетке (без другой сетки), и когда я нажимал + расширение, должно происходить и наоборот.Как создать родительские отношения с дочерними элементами в C1flexgrid

Я написал ниже код, в котором у меня есть один столбец в datatable, относящийся к родительскому и дочернему. Если это родитель, я делаю это еще 1.

Когда я попытался с этим кодом. R2 строка идет как дочерний узел 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

 Смежные вопросы

  • Нет связанных вопросов^_^