Update v DataGridView - ignorace změny stavu checkboxu   otázka

VB.NET, ADO.NET, WinForms

Chtěl bych požádat o radu.

Mám datagridview, který mám přes dataset propojen s tabulkou Accessu.

Private Sub Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
        Me.DepartmentsTableAdapter.Fill(Me.DataDS.Departments) 
End Sub

Private Sub SaveToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveToolStripButton.Click
DepartmentsTableAdapter.Update(Me.DataDS.Departments) 
    End Sub

Pokud kliknu na button pro uložení, všechny změny v gridu se korektně do zdrojové DB uloží až na jednu výjimku.

Problém je pokud změna nastane pouze ve sloupci gridu, který je typu DataGridViewCheckBoxColumn. Pokud udělám změnu i v nějakém klasickém sloupci např. textboxu tak zdrojová databáze je aktualizovaná korektně tedy i včetně změny v checkboxu. Dokonce pokud checkbox převedu na typ textboxu tak uvedený problém odpadá. Jenže vypisovat všude True nebo False mi přijde uživatelsky nekorektní.

Přijde mi to, jako by databinding ignoroval change u tohoto controlu. To vysvětluje, že update proběhne pokud změním i jiný sloupec textového či jiného typu.

Věděl by jste někdo jak tenhle nedostatek elegantně obejít ?

Jediný co mě napadá je, při změně datarow ověřit zda došlo ke změně a pokud ano pro jistotu programově provést update i u nějakého např. textového sloupce, abych adaptér donutil provést update. Ale nepřijde mi to moc elegantní. Mohl bych sice provést celý update manuálně, ale protože mám těchto tabulek povícero, tak to bych bral jako poslední možnost.

Předem díky za každou radu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě jsem postřehl, že update proběhne i u jednotlivé změny pouze v checkboxu pokud v gridu přejdu před uložením na jiný řádek. Pokud zůstanu v řádku a pouze změním fokus na jiný control, tak update neproběhne.

Pracuji ve VB 2010 Express, FW 4.0

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsem to nakonec vyřešil tak, že si skočím o řádek víš resp.níž dle kurzoru nebo v případě jediného záznamu udělám update sloupce nula. Jiné řešení mne nenapadlo


Private Sub d_Tables_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                Me.DepartmentsTableAdapter.Fill(Me.DataDS.Departments)
    End Sub
    Private Sub SaveToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveToolStripButton.Click
        Try
            Dim cRow As Integer = dgw.CurrentRow.Index
            Dim cCol As Integer = dgw.CurrentCell.ColumnIndex
            If cRow - 1 > -1 Then
                dgw.CurrentCell = dgw.Rows(cRow - 1).Cells(cCol)
            Else
                If dgw.Rows.Count > 0 Then
                    dgw.CurrentCell = dgw.Rows(cRow + 1).Cells(cCol)
                Else
                    dgw.Rows(0).Cells(0).Value = dgw.Rows(0).Cells(0).Value
                End If
            End If
            dgw.CurrentCell = dgw.Rows(cRow).Cells(cCol)
            DepartmentsTableAdapter.Update(Me.DataDS.Departments)
            SaveToolStripButton.Enabled = False
            cMessage.StatusText("Úspěšně uloženo", False) 'třída zpráv
        Catch ex As Exception
            cMessage.ErrorMsg(Err.Description, Me.Name & " : " & sender.name)
        End Try
    End Sub
    Private Sub dgw_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgw.CellValueChanged
        SaveToolStripButton.Enabled = True
    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback