c# - 将 DataGridView 绑定(bind)到对象列表

标签 c# .net winforms data-binding mvp

我是 .NET 中的数据绑定(bind)新手,我想将我的 DataGridView 绑定(bind)到对象列表。该网格可以通过两种方式填充。

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

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

最后,此列表绑定(bind)到 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. 我不确定我绑定(bind)事物的方式是否正确。而且我想知道是否可以在此处使用单个绑定(bind)列表,因为我将相同的列表绑定(bind)到相同的 DataGridView!可能吗?

  2. 在这种情况下,将 BindingSource 与 BindingList 一起使用有什么区别?

最佳答案

在构造函数中将 DataGridView 绑定(bind)到演示者 attendanceList,假设您的 View 此时已实例化。然后在演示者中执行如下操作:

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);
    }
}

关于c# - 将 DataGridView 绑定(bind)到对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457330/

相关文章:

c# - IEnumerable.GroupBy 不分组

c# - 正则表达式中的子表达式

c# - 如何阻止按钮控件中的文本在 Winforms 中将单词分成多行?

c# - Spring.NET - 对象引用未设置为对象的实例

c# - Microsoft 图表控件 : how to set chart width to width of surrounding div?

c# - 派生类型的 FluentValidation SetCollectionValidator

c# - 如何使用 LINQ 比较两个有序列表?

C# 用鼠标移动矩形的错误

c# - 如何从 SqlDataReader 返回单个值?

c# - 如何使用 SendInput 发送斯堪的纳维亚字母