0

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

我在下面的代码中编写了与 parent 和 child 相关的数据表中的一列。如果它是父母,那么我将其设为 1,否则为 0。

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

1 回答 1

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;
                }
            }
        }
    }
于 2015-10-12T11:21:26.327 回答