Свързване на DataGridView към списък с обекти

Нов съм в Databinding в .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);
    }

}
  1. Не съм сигурен, че начинът, по който съм обвързал нещата, е правилен. И също така се чудя дали мога да използвам единичен списък за обвързване тук, тъй като обвързвам същия списък към същия DataGridView! Възможно ли е?

  2. Каква е разликата в използването на BindingSource заедно и с BindingList в този контекст?


person CAD    schedule 27.06.2014    source източник
comment
Fwiw Използвам по-стара MVP рамка, но това, което обикновено виждам, е обвързването на View към Presenter, а не Presenter, който задава източника на данни за изгледи.   -  person Eric Scherrer    schedule 27.06.2014


Отговори (1)


Свържете 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);
    }
}
person Eric Scherrer    schedule 27.06.2014
comment
My View не знае за водещия! Все още не съм приложил тази спестяваща част. Идеята ми е да използвам Attendance_ID, за да видя дали съществува. - person CAD; 27.06.2014
comment
Добре, няма проблем, актуализирах отговора, за да го съобразя. - person Eric Scherrer; 27.06.2014
comment
Всъщност моят DataService връща List<IAttendance> и за да работи с вашия метод, DataService трябва да връща BindingList<IAttendance> Нали? (Имам предвид GetAttendance(){}) Също така не мога да намеря метода .AddRange()! - person CAD; 27.06.2014
comment
Съжалявам, работя в бележника :) Актуализирах отговора - опитайте. - person Eric Scherrer; 27.06.2014
comment
Здравейте, внедрих вашия код в моето приложение. Но сега получавам грешка в цикъла foreach, който казва... System.ArgumentOutOfRangeException was nhandled Message=Стойността на '4' не е валидна за 'indexStart'. 'indexStart' трябва да е по-малко или равно на 0. Но изглежда, че всички елементи са добавени успешно към списъка за обвързване, преди да възникне това изключение. - person CAD; 28.06.2014
comment
,Не, вината е моя. Дублиращ се проблем в списъка. Благодаря ти много! - person CAD; 28.06.2014
comment
Радваме се да помогнем на Chathuranga! - person Eric Scherrer; 29.06.2014