Potrzebuje podpowiedzi jak odzworować zmiany użytkownika na danych wyswietlanych w DataGridView na kolekcje ze zrodla danych tego DGV.
- nie wiem jak zrobić wiązanie dwukierunkowe.
- ewntualne mam jeszcze opcje wylapywania zdarzenia dgv_CellValueChanged i na podstawie DataGridViewCellEventArgs odszukiwać konkretne wlasciwosci i aktualizowac obiekty w kolekcji
DGV korzysta z BindingSource, a jako BindingSource.DataSource ustawiana jest kolekcja obiektow pobrana z bazydanych lub pliku, przez repozytorium. Interesuje mnie odwzorowanie zmian tylko na tej kolekcji bez odwzorowywania zmian w bazie danych czy plikach (zrodlach z ktorych korzysta repozytorium).
Generalnie chce uzyskac cos takiego.
W DGV wyswietlam pozycje zamowienia, m.in. są tam kolumny (int)Ilość i (bool)CzyDrukowac i tylko te kolumny maja mozliwośc edycji przez uzytkownika. Uzytkownik moze zmienic ilosc i odhaczyc/zaznaczyc checkBoxa okreslajacy czy drukowac zadana ilosc etykiet czy nie.
Przykład jak to powiązałem i ustawiłem.
public OknoGlowne()
{
InitializeComponent();
presenter = new PresenterOknaGlownego();
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.DoubleBuffered = true;
this.presenter.Initialize(this);
UstawienieStyluDGV_WykazuZamowien();
dgv_WykazZamowien.DataSource = bSource_WykazZamowien;
presenter.UstawZrodloDanychWykazuZamowien();
UstawienieStyluDGV_WykazuPozycjizamowienia();
dgv_WykazPozycjiZamowienia.DataSource = bSource_ZaznaczoneZamowienie;
UstawDaneZaznaczonegoZamowienia();
WybraneZamowienie = bSource_WykazZamowien.Current as Zamowienie;
}
public List<Zamowienie> ListaZamowien
{
get
{
return this.bSource_WykazZamowien.DataSource as List<Zamowienie>;
}
set
{
this.bSource_WykazZamowien.DataSource = value;
this.bSource_WykazZamowien.ResetBindings(false);
}
}
public Zamowienie WybraneZamowienie
{
get
{
return this.bSource_WykazZamowien.Current as Zamowienie;
}
set
{
this.bSource_ZaznaczoneZamowienie.DataSource = ((Zamowienie)value).Pozycje;
this.bSource_ZaznaczoneZamowienie.ResetBindings(false);
}
}
private void UstawienieStyluDGV_WykazuPozycjizamowienia()
{
dgv_WykazPozycjiZamowienia.AutoGenerateColumns = false;
dgv_WykazPozycjiZamowienia.AlternatingRowsDefaultCellStyle.BackColor = Color.LightCyan;
dgv_WykazPozycjiZamowienia.Columns.Add("0", "Lp");
dgv_WykazPozycjiZamowienia.Columns[0].ReadOnly = true;
dgv_WykazPozycjiZamowienia.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgv_WykazPozycjiZamowienia.Columns[0].Width = 40;
dgv_WykazPozycjiZamowienia.Columns[0].DataPropertyName = "NrPozycji";
dgv_WykazPozycjiZamowienia.Columns[0].DefaultCellStyle.Font = new Font(dgv_WykazZamowien.Font, FontStyle.Bold);
dgv_WykazPozycjiZamowienia.Columns[0].Resizable = DataGridViewTriState.False;
dgv_WykazPozycjiZamowienia.Columns.Add("1", "Index Wyrobu");
dgv_WykazPozycjiZamowienia.Columns[1].ReadOnly = true;
dgv_WykazPozycjiZamowienia.Columns[1].Width = 120;
dgv_WykazPozycjiZamowienia.Columns[1].DataPropertyName = "IndexERP";
dgv_WykazPozycjiZamowienia.Columns.Add("2", "Nazwa Handlowa");
dgv_WykazPozycjiZamowienia.Columns[2].ReadOnly = true;
dgv_WykazPozycjiZamowienia.Columns[2].Width = 238;
dgv_WykazPozycjiZamowienia.Columns[2].DataPropertyName = "NazwaHandlowa";
dgv_WykazPozycjiZamowienia.Columns.Add("3", "Nazwa Sprzedażowa");
dgv_WykazPozycjiZamowienia.Columns[3].ReadOnly = true;
dgv_WykazPozycjiZamowienia.Columns[3].Width = 238;
dgv_WykazPozycjiZamowienia.Columns[3].DataPropertyName = "NazwaSprzedazowa";
dgv_WykazPozycjiZamowienia.Columns.Add("4", "Ilość etykiet");
dgv_WykazPozycjiZamowienia.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgv_WykazPozycjiZamowienia.Columns[4].Width = 50;
dgv_WykazPozycjiZamowienia.Columns[4].ReadOnly = false;
dgv_WykazPozycjiZamowienia.Columns[4].DataPropertyName = "Ilosc";
DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn();
column.Name = "Wydruk";
column.Width = 65;
column.DataPropertyName = "CzyDrukowac";
column.ReadOnly = false;
dgv_WykazPozycjiZamowienia.Columns.Add(column);
}