0

私は使用してC1Flexgridおり、このグリッドで親子関係を作成する必要があります。ただし、子の詳細は同じグリッド (他のグリッドなし) に表示する必要があり、+ をクリックすると展開が発生し、その逆も同様です。

親と子に関連するデータテーブルに1つの列があるコードの下に書いています。それが親である場合、私はそれを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;
                    }
                }
            }
        }
    }
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 に答える