我在ListBox studentListBox
中有一个Form1
,它显示studentList
的成员Form2
。有一个班级Student
,其中包含有关每个学生的一些不同属性。
我在BindData()
中也有一个功能Form1
,它将studentListBox
数据源设置为studentList
。它还会将studentListBox
显示成员设置为Name
,这是类Student
中的属性。
Form1
public void BindData()
{
if (studentListHome != null)
{
studentListBox.DataSource = studentListHome;
foreach(Student s in studentListHome)
{
studentListBox.DisplayMember = "Name";
}
}
}
在Form1_Load
上调用BindData,也可以通过单击刷新按钮调用它。
Form2
创建每个学生并将其添加到studentList
Form1
内部。点击提交按钮后执行此操作
Form2
private void submitButton_Click(object sender, EventArgs e)
{
if (comparator(nameInput) &
comparator(idInput) &
comparator(bdayInput)){
variable_assignment();
var tempStudent = StudentCreation();
if(tempStudent != null)
{
studentListForm2.Add(tempStudent);
}
testList.Add(tim);
testList.Add(john);
testList.Add(tempStudent);
foreach(Student s in testList)
{
homeForm.StudentListHome.Add(s);
}
homeForm.BindData();
}
}
comparator()
是一个确保用户输入字段不为空的函数。
variable_assignment()
将用户输入分配给相关变量。
StudentCreation()
是一个实现Student
就像我在标题中提到的那样,ListBox
仅在第一次调用时更新,之后,它保持完全相同。我知道Students
已添加到List<Student>
ListBox
绑定的Console.WriteLine
,因为我Student
他们正在studentList
我可以看到新auto baseVector = std::make_unique<std::vector<Base*>>();
auto baseVector = std::make_unique<std::vector<std::unique_ptr<Base>>>();
正在每次单击提交按钮时都会添加到baseVector.push_back(std::make_unique<SubClass>());
。
我该如何解决这个问题?
答案 0 :(得分:0)
一些小事
if (studentListHome != null)
{
studentListBox.DataSource = studentListHome;
foreach(Student s in studentListHome)
{
studentListBox.DisplayMember = "Name";
}
}
foreach是多余的,因为你只需要为列表框设置一次而不是列表框中的每个项目。
if (studentListHome != null)
{
studentListBox.DataSource = studentListHome;
studentListBox.DisplayMember = "Name";
}
接下来回答你的问题,你必须使用BindingList而不是任何其他类型的集合,然后进行比较和排序,你可以在Student类本身上实现IComparable和INotifiyPropertyChanged。
然后你不再重新绑定,只需修改BindingList实例来操作列表,列表框就会与列表同步。