如何用五元组嵌套列表创建和绑定显示网格

本文关键字:绑定 显示 网格 创建 列表 何用五 元组 嵌套 | 更新日期: 2023-09-27 18:04:15

我正在研究一个项目,我有必要创建和绑定网格,以显示来自服务器的响应,这是一个类和一些字段的列表,类的列表还包含一些变量以及另一个包含一些字段的不同类的列表和另一个不同类的列表…还有五层

我必须显示顶级类和所有类的列表,以及列表中的每个嵌套列表和它们自己。请允许我使用伪代码来更好地解释三层结构。我正在处理一个五层。

classA
{
List<classB> classBList;
List<classC> classCList;
int whatever;
string something;
}
ClassB
{
List<classC> classCList;
int somethingElse;
string otherThing;
}
classC
{
int somethingA;
string somethingB;
}
List<ClassA> list1;

我正在尝试创建和绑定并显示list1的网格。我主要是一个直接的后端编码员,所以。aspx页面是真正让我陷入循环的东西。我已经弄清楚了如何绑定和显示类中的字段和字段以及单个列表,但是这些列表对我来说真的很有挑战性,而且我在几天内没有取得任何进展。

任何帮助都非常感谢!

如何用五元组嵌套列表创建和绑定显示网格

可能是这样的,你把所有的值都压平,并使用字典来跟踪它们的来源(如果需要的话)。然后,您将拥有所有值的扁平列表,并且可以轻松地创建或重新创建原始值列表(属于ClassA的值)。ClassBList,例如)使用Linq或Dictionary键本身:

public class flattenedList
{
    public string whatever;
    public int whateverInt;
}
public class nested
{
    private Dictionary<string, List<flattenedList>> listData = new Dictionary<string, List<flattenedList>>();
    private List<ClassA> list1 = new List<ClassA>();
    ClassA classA = new ClassA();
    ClassB classB = new ClassB();
    ClassC classC = new ClassC();
    public void processCalsses()
    {
        string key = "";
        foreach (ClassA a in list1)
        {
            key = "ClassA.ClassBList";
            foreach (ClassB b in classA.classBList)
            {
                addToDictionary(key, new flattenedList() { whatever = b.otherThing, whateverInt = b.somethingElse });
            }
            key = "ClassA.ClassCList";
            foreach (ClassC c in classA.classCList)
            {
                addToDictionary(key, new flattenedList() { whatever = c.somethingB, whateverInt = c.somethingA });
            }
            addToDictionary("ClassA", new flattenedList() { whatever = a.something, whateverInt = a.whatever });
        }
        key = "ClassB.ClassCList";
        foreach (ClassC c in classB.classCList)
        {
            addToDictionary(key, new flattenedList() { whatever = c.somethingB, whateverInt = c.somethingA });
        }
        addToDictionary("ClassB", new flattenedList() { whatever = classB.otherThing, whateverInt = classB.somethingElse });
        addToDictionary("ClassC", new flattenedList() { whatever = classC.somethingB, whateverInt = classC.somethingA });
        foreach (KeyValuePair<string, List<flattenedList>> kvp in listData)
        {
            for (int i = 0; i < kvp.Value.Count; i++)
            {
                Console.WriteLine(key + "[" + i.ToString() + "] whatever = " + kvp.Value[i].whatever);
                Console.WriteLine(key + "[" + i.ToString() + "] whateverInt = " + kvp.Value[i].whateverInt.ToString() + "'n");
            }
        }
    }
    private void addToDictionary(string key, flattenedList f)
    {
        if (!listData.ContainsKey(key))
        {
            listData.Add(key, new List<flattenedList>());
        }
        listData[key].Add(f);
    }
    public class ClassA
    {
        public List<ClassB> classBList = new List<ClassB>();
        public List<ClassC> classCList;
        public int whatever;
        public string something;
    }
    public class ClassB
    {
        public List<ClassC> classCList;
        public int somethingElse;
        public string otherThing;
    }
    public class ClassC
    {
        public int somethingA;
        public string somethingB;
    }

}

注意,我必须实例化这些类,以便获得允许我键入的智能感知。我假设您将在类范围内或在公共静态类中创建对该方法可见的实例版本。

PS—如果您不需要维护每个数据的来源(它来自哪个类和列表),那么有一种更简单的方法可以做到这一点。