3

「categories」というテーブルを持つデータベースがあります。テーブルには3つの列があります:1。ID2.名前3.ParentID。

id | Name    |ParentID
_____________________
1  | John    | 0
2  | Charlie | 1
3  | Vasily  | 1
4  | David   | 2
5  | Edward  | 3

つまり、ジョンはチャーリーとヴァシリーの親であり、デビッドはチャーリーの子であり、エドワードはヴァシリーの子です。問題は、子パネルが親パネル内にある必要があることを考慮して、カテゴリごとにいくつかのパネルを作成してデータを入力するにはどうすればよいですか?質問はここでの質問とほとんど同じですが、ツリービューではなくパネルを使用する必要があります。ありがとうございました。

4

1 に答える 1

2

コードをそのまま変更する必要があります

public class MyObject
{
    public int Id;
    public int ParentId;
    public string Name;
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) {
        List<MyObject> list = new List<MyObject>();
        list.Add(new MyObject() { Id = 1, Name = "Alice", ParentId = 0 });
        list.Add(new MyObject() { Id = 2, Name = "Bob", ParentId = 1 });
        list.Add(new MyObject() { Id = 3, Name = "Charlie", ParentId = 1 });
        list.Add(new MyObject() { Id = 4, Name = "David", ParentId = 2 });

        BindTree(list, null);
    }
}

private void BindTree(IEnumerable<MyObject> list, Panel parentPanel)
{

    var nodes = list.Where(x => parentPanel == null ? x.ParentId == 0 : x.ParentId == int.Parse(parentPanel.ID));
    foreach (var node in nodes) {
        Panel newPanel = new Panel() { ID = node.Id.ToString() };
        if (parentPanel == null) {
            Panel1.Controls.Add(newPanel);
        } else {
            parentPanel.Controls.Add(newPanel);
        }
        BindTree(list, newPanel);
    }
}
于 2012-11-17T23:36:15.543 に答える