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.