我尝试使用列表中的信息填充数据网格,然后在按下保存按钮后将数据网格更改保存回列表中。
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>();
}
}
我无法在按下检查按钮时将列表转换为数据网格,或者在按下保存按钮时将列表转换回数据网格。任何人都可以帮忙吗?
答案 0 :(得分:0)
查看代码我主要看一个问题。但请注意,我远不是数据绑定方面的专家!
我发现您正在为BindingList<>
类型创建Student
。我希望你真的想要自上而下地显示一个学生的成绩。
如果您真的想要从左到右显示所有学生自上而下和他们的成绩,您将不得不做一些严重的扭曲!
现在BindingList
应绑定Grades
而不是Student
,因此第一个想法是将其更改为BindingList<int>
。
然而afaik未命名的变量会导致错误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
;还有根本不需要保存操作,因为数据绑定双向,并且每个更改实际发生在List中!
只有在需要撤销功能时才需要更多编码,但这是另一回事......