c#列表和数据视图

本文关键字:视图 数据 列表 | 更新日期: 2023-09-27 18:15:15

我试图用列表中的信息填充数据网格,然后按下保存按钮后,它将数据网格更改保存回列表中。

    int pos = MainMenu.myList.FindIndex(x => x.ID == validID);
    var tempStu = MainMenu.myList[pos];
    if (tempStu is DormStudent)
    {
        DormStudent tempDorm = tempStu as DormStudent;
        nameTextBox.Text = tempDorm.Name;
        var blist = new BindingList<Student>(tempDorm.Grades);
        var source = new BindingSource(blist, null);
        gradesDataGridView.DataSource = source;
    }
    else
    {
        nameTextBox.Text = tempStu.Name;
        var blist = new BindingList<Student>(tempStu.Grades);
        var source = new BindingSource(blist, null);
        gradesDataGridView.DataSource = source;
    }

和当你按下保存按钮(我没有保存部分很好)

    int pos = MainMenu.myList.FindIndex(x => x.ID == validID);
    var tempStu = MainMenu.myList[pos];
    if (tempStu is DormStudent)
    {
        DormStudent tempDorm = tempStu as DormStudent;
        tempDorm.Grades = gradesDataGridView;
        MainMenu.myList[pos] = tempDorm;
    }
    else
    {
        tempStu.Grades = gradesDataGridView;
        MainMenu.myList[pos] = tempStu;
    }

这是年级所在的学生班。

    public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public List<int> Grades;
        public Student()
        {
            ID = 0;
            Name = "No Student";
            Grades = new List<int>();
        }
        public Student(int i, string n)
        {
            ID = i;
            Name = n;
            Grades = new List<int>();
        }
    }

当按下检查按钮或按下保存按钮时,我无法将列表转换为数据网格。有人能帮忙吗?

c#列表和数据视图

看你的代码,我主要看到一个问题。但是请注意,我远非数据绑定方面的专家!

我看到您正在为类型Student创建BindingList<>。我希望你真的想从上到下显示一个学生的成绩。

如果你真的想从上到下显示所有的学生和他们的成绩在列中从左到右,你将不得不做一些严重的扭转!

现在BindingList应该绑定Grades而不是Student,所以第一个想法是将其更改为BindingList<int>

然而,许多未命名的变量使DataMembers变坏。要显示它们,数据应该是Properties

所以我创建了一个新的类Grade来包装这个整数。另外,我还添加了一个字符串Test来保存测试的描述。如果你不想要,就把它去掉吧!

public class Grade
{
    public int Points  { get; set; }
    public string Test { get; set; }
    public Grade()
    { Points = 0; Test = "No Test"; }
    public Grade(int points, string test)
    { Points = points; Test = test; }
}

这将调用对Student类的更改:

public List<Grade> Grades;

和(两次)

Grades = new List<Grade>();

创建BindingList的两行现在看起来像这样:

var blist = new BindingList<Grade>(tempDorm.Grades);
var blist = new BindingList<Grade>(tempStu.Grades);

好消息是,现在不仅数据加载到DataGridView;还有根本不需要保存操作,因为数据是双向绑定的,每个更改实际上都发生在列表中!

只有在需要撤销功能的情况下,您才需要更多的编码,但那是另一回事。