Automatyczne zatwierdzenie edytowanej komórki- dataGridView

0

Czy ktoś wie, w jaki sposób w kontrolce dataGridView zatwierdzić aktualnie edytowany wiersz/komórkę?
Całość wygląda tak, że mam na formie dataGridView z jedną kolumną wstawioną na sztywno (typu checkBox), a reszta kolumn jest pobierana z bazy SQLowej. Chciałbym, aby w momencie kliknięcia w checkBox w pierwszej kolumnie od razu od razu miała ona zmienioną wartość. W tej chwili, żeby zatwierdzić zmianę musze przechodzić do innego wiersza i wydaje mi się to bez sensu.

Zadawałem też podobne pytanie (ten sam problem) na codeguru.pl, ale tam niestety nikt na moje wołanie o pomoc nie odpowiedział :( Nie wiem, czy problem jest może zbyt błachy, żeby na niego odpowiadać? Mam nadzieję że tutaj ktoś mi pomoże :)

0

Zasadnicze pytanie - jak obslugujesz CheckBoxa. Kontrolka GridView jest na tyle rozbudowanym narzedziem, ze opis "klikam tu, klikam tam" jest raczej malo pomocny. Najlepiej dorzuc jakis kawalek kodu a zapewne otrzymasz odpowiedz.

0

Już się porprawiam :)

Wczytanie danych do Grida:

            dataSet3.Clear();
            dataSet3.ReadXml("http://localhost/pobierz_xml.php");
            dataGridView3.DataSource = dataSet3;
            dataGridView3.DataMember = "artykul";

W gridzie mam wstawione 2 kolumny typu checkBox, z których jedna jest nie związana z istniejącymi danymi, natomiast druga (zawierająca wartości logiczne) jest powiązana z danymi xml za pomocą

dataGridView3.Columns[1].DataPropertyName = dataSet3.Tables["artykul"].Columns[0].ColumnName;

Po kliknięciu w check boxa chciałbym wykonać odpowiedni kod w zależności od tego, czy ma on wartość true czy false. Ale jeśli odwołam się do zdarzenia "CellClick" to nic mi nie da, bo stan komórki zmienia się dopiero po kliknięciu i zdarzenie zawiera jeszcze stan poprzedni :(
Podejrzewam, że trzeba by wywołać jakieś zdarzenie ale już po kliknięciu (taki odpowiednik AfterCellClick), ale nie mam pojęcie jakie. Może ktoś wie jak to obejść? A może podchodzę do tego od złej strony?

0
kristoffo napisał(a)

Po kliknięciu w check boxa chciałbym wykonać odpowiedni kod w zależności od tego, czy ma on wartość true czy false. Ale jeśli odwołam się do zdarzenia "CellClick" to nic mi nie da, bo stan komórki zmienia się dopiero po kliknięciu i zdarzenie zawiera jeszcze stan poprzedni :(

Chyba ciagle nie rozumiem.
Przeciez akcja na checkboxie poprzez zdazenie CellContentClick wywoluje natychmiastowa reakcje. Od razu 'po kliknieciu'.

Albo to ja jakis niekumaty dzisiaj jestem.....

0
        private void dataGridView3_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            MessageBox.Show(dataGridView3.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
        }

Kod wyświetla zawartość komórki, którą właśnie klikam, niestety pomimo zmiany stanu checkBoxa cały czas pokazuje ten sam komunikat. Jeżeli przejdę do następnego wiersza i wrócę to wtedy dopiero zmienia sięwyświetlana w MessageBoxie wartość.

0

Czy naprawdę nikt nie wie co z tym zrobić? Cy to po prostu ja jestem taki odporny no wiedzę?

0

Już znam odpowiedź: wystarczy użyć zdarzenia CurrentCellDirtyStateChanged i w nim zatwierdzić zmiany przez Commit. Takie proste, a takie trudne :)

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