如何在C1flexgrid中建立父子关系

时间:2015-10-05 13:16:05

标签: c1flexgrid

我正在使用C1Flexgrid,我需要在此网格中建立父子关系。但是儿童细节需要在同一个网格中显示(没有其他网格),当我点击+扩展时,应该发生,反之亦然。

我在下面写了代码,其中我在父数据库和子数据库中有一列数据表。如果它是父母,那么我正在将其作为1,否则为0。

当我尝试使用此代码时。 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;
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分: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;
                }
            }
        }
    }