C# 将DataGridView绑定到对象列表

C# 将DataGridView绑定到对象列表,c#,.net,winforms,data-binding,mvp,C#,.net,Winforms,Data Binding,Mvp,我不熟悉.NET中的数据绑定,我想将我的DataGridView绑定到一个对象列表。此网格可以通过两种方式填充 表单中有文本框,用户可以输入文本,当他们按下“添加”按钮时,一个新对象将用提供的字段实例化,并添加到列表中 另一种方法是,当用户搜索对象时,匹配的对象从数据库加载到列表中。同样,在搜索之后,用户应该能够像第一种方法那样将新项目添加到此列表中 最后,这个列表绑定到DataGridView,现在用户可以对网格中显示的项目进行任何更改,如果可以的话,用户可以保存它们 因此,在我的演示者中,我

我不熟悉.NET中的数据绑定,我想将我的DataGridView绑定到一个对象列表。此网格可以通过两种方式填充

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

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

最后,这个列表绑定到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);
    }

}
Class AttendancePresenter
{
私人出勤
{
AttendanceList.Add(attendanceModel);
var bindingList=新的bindingList(AttendanceList);
var source=新的BindingSource(bindingList,null);
_View.AttendanceGrid=源;
}
私人出勤()
{
AttendanceList=_DataService.getAttention();
var bindingList=新的bindingList(AttendanceList);
var source=新的BindingSource(bindingList,null);
_View.AttendanceInGrid=源;
}
私有void Save()
{
_DataService.InsertAttendance(AttendanceList);
}
}
  • 我不确定我装订东西的方式是否正确。另外,我想知道在将同一个列表绑定到同一个DataGridView时,是否可以在这里使用单个绑定列表!可能吗

  • 在此上下文中,将BindingSource与BindingList一起使用有什么区别


  • 将DataGridView绑定到构造函数右侧的presenters 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);
        }
    }
    
    Class AttendancePresenter
    {
    私有只读绑定列表_attendanceList;
    公众出席人数中心()
    {
    _attendanceList=新绑定列表();
    _View.AttendanceGrid=\u attendanceList;
    }
    私人出勤
    {
    _attendanceList.Add(attendanceModel);
    }
    私人出勤()
    {
    _出席者。清除();
    var attention=_DataService.getAttention();
    foreach(var值班员)
    {
    _attendanceList.Add(服务员);
    }
    }
    私有void Save()
    {
    _DataService.InsertAttendance(_attendanceList);
    }
    }
    
    Fwiw我使用的是旧的MVP框架,但我通常看到的是视图绑定到演示者,而不是演示者设置视图数据源。我的视图不知道演示者!我仍然没有实现那个保存部分。我的想法是使用考勤ID查看它是否存在。好的,没问题,更新了答案以适应这一点。实际上,我的
    DataService
    返回一个
    列表
    ,要使用您的方法,
    DataService
    应该返回一个
    绑定列表
    不是吗?(我指的是GetAttention(){})我也找不到.AddRange()方法!抱歉,我正在使用记事本:)更新了答案-请尝试一下。您好,我在我的应用程序中实现了您的代码。但是现在我在foreach循环中得到一个错误,说。。。“System.ArgumentOutOfRangeException was nhandled Message=值'4'对'indexStart'无效。“indexStart'必须小于或等于0。”但在发生此异常之前,似乎所有项都已成功添加到绑定列表中。