将DataGridView绑定到Object列表

时间:2014-06-27 17:09:31

标签: c# .net winforms data-binding mvp

我是.NET中Databinding的新手,我想将DataGridView绑定到对象列表。该网格可以以两种方式填充。

表单中有TextBox,用户可以输入文本,当他们按下Add按钮时,会使用提供的字段实例化一个新对象,并将其添加到列表中。

其他方式是,当用户搜索对象时,匹配的对象从数据库加载到列表中。搜索后,用户应该能够像第一种方法一样将新项目添加到此列表中。

最后,此列表绑定到DataGridView,现在用户可以对网格中显示的项目进行任何更改,如果可以,用户可以保存它们。

所以在我的演示者中,我有三种方法可满足上述要求。

Class AttendancePresenter 
{
    private void AddAttendance()
    {
        AttendanceList.Add(attendanceModel);
        var bindingList = new BindingList<IAttendance>(AttendanceList);
        var source = new BindingSource(bindingList, null);
        _View.AttendanceGrid = source;
    }


    private void GetAttendance()
    {
        AttendanceList = _DataService.GetAttendance();
        var bindingList = new BindingList<IAttendance>(AttendanceList);
        var source = new BindingSource(bindingList, null);
        _View.AttendanceInGrid = source;
    }

    private void Save()
    {
        _DataService.InsertAttendance (AttendanceList);
    }

}
  1. 我不确定我绑定的方式是对的。而且我想知道我是否可以在这里使用单个绑定列表,因为我将相同的列表绑定到同一个DataGridView!有可能吗?

  2. 在这种情况下,使用BindingSource与BindingList的区别是什么?

1 个答案:

答案 0 :(得分:2)

将DataGridView绑定到构造函数中的演示者AttendanceList,假设您的视图在该点实例化。然后在演示者做这样的事情:

Class AttendancePresenter 
{
    private readonly BindingList<IAttendance> _attendanceList;

    public AttendancePresenter()
    {
        _attendanceList = new BindingList<IAttendance>();
        _View.AttendanceGrid = _attendanceList;
    }

    private void AddAttendance()
    {
        _attendanceList.Add(attendanceModel);
    }

    private void GetAttendance()
    {
        _attendanceList.Clear();

        var attendance = _DataService.GetAttendance();

        foreach (var attendant in attendance)
        {
            _attendanceList.Add(attendant);
        }
    }

    private void Save()
    {
        _DataService.InsertAttendance (_attendanceList);
    }
}