Podmiana DataSource w DataGridView

0

Witam,
programuje sobie dla zabicia czasu, ostatnio walczę z aplikacjami bazodanowymi bez żadnego przygotowania teoretycznego w tym temacie. Do tej pory jakoś to wszystko szło, ale utknąłem w martwym punkcie i chyba bez jakichś wskazówek od was się nie obędzie;). Mam następujący problem. W DataGridView, wyświetlam zawartość bazy danych z kilku tabel. W tabeli mogę zmienić wartość w jednej kolumnie w ten sposób:

da.UpdateCommand = new SqlCommand("UPDATE ZgloszenieSerwisowe SET StatusZgloszenia = @StatusZgloszenia WHERE (ID = @Original_ID)", sc);
                da.UpdateCommand.Parameters.Add("@Original_ID", SqlDbType.Int).Value = dgv_ZgloszenieSerwisoweWybierz[0, dgv_ZgloszenieSerwisoweWybierz.CurrentCell.RowIndex].Value;
                da.UpdateCommand.Parameters.Add("@StatusZgloszenia", SqlDbType.Text).Value = cb_StatusZgloszenia.Text;
                sc.Open();
                da.UpdateCommand.ExecuteNonQuery();
                sc.Close();
zgloszenieSerwisoweTableAdapter.Fill(serwisDataSet.ZgloszenieSerwisowe);
                wyszukaj.Filtruj(serwisDataSet.ZgloszenieSerwisowe, dgv_ZgloszenieSerwisoweWyszukaj, dgv_ZgloszenieSerwisoweWybierz);

Wszystko działa, tak jak powinno. W zaznaczonym wierszu zmienia się wartość w kolumnie. Program umożliwia też przefiltrowanie tabeli za pomocą metody filtruj. W skrócie robię to tak (datatable to serwisDataSet.ZgloszenieSerwisowe) :

dgv_klientWybierz.DataSource = datatable.Select(select);

Problem polega na tym że zmiana zawartości kolumny i filtrowanie wartości w tabeli działają ale tylko osobno, tzn w momencie kiedy uruchomie program, wyświetli mi się tabela, następnie ją przefiltruje żeby znaleźć interesujący mnie wiersz do zmiany a następnie zatwierdzę zmianę to i owszem zmiana wykona się na wybranym wierszu ale ja już tego nie zobaczę bo program wyspie się na wierszu:

dgv_klientWybierz.DataSource = datatable.Select(select);

a w zasadzie przejdzie do DataSet.designer.cs

public int ID {
                get {
                    return ((int)(this[this.tableZgloszenieSerwisowe.IDColumn]));
                }
                set {
                    this[this.tableZgloszenieSerwisowe.IDColumn] = value;
                }
            }

dając wyjątek:

System.Data.RowNotInTableException was unhandled by user code
  Message=Ten wiersz został usunięty z tabeli i nie zawiera danych. Element BeginEdit() pozwoli utworzyć nowe dane w tym wierszu.
Source=System.Data
  StackTrace:
       w System.Data.DataRow.GetDefaultRecord()
       w System.Data.DataRow.get_Item(DataColumn column)
       w Serwis.SerwisDataSet.ZgloszenieSerwisoweRow.get_ID() w C:\Users\Krzysiek\Documents\Visual Studio 2010\Projects\Serwis\Serwis\SerwisDataSet.Designer.cs:wiersz 2014
  InnerException: 

Nie rozumiem w czym problem. W trybie debugowania widzę że datatable.Select(select) zwraca jakieś wartości w każdym z przypadków, to skąd problem w prostym przypisaniu wyniku datatable.Select(select) do DataSource DataGridView, zwłaszcza że mogę sto razy filtrować osobno i sto razy zmieniać wartość osobno i to działa a w połączeniu razem już nie.

0

Siedziałem nad tym chyba dwa tygodnie, a wystarczyło że napisałem do was i problem z głowy:), przestałem bezpośrednio operować na DataSoruce DataGridView, zacząłem podmieniać DataSource ale BindingSource powiązanego z DataGridView i to pomogło;P.

1 użytkowników online, w tym zalogowanych: 0, gości: 1