Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[VB 2019] Odczyt komórki datagridview w trakcie wpisywania

Idź do strony Poprzedni  1, 2

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Visual Studio: C#, VB, VC++, …
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 8376
Skąd: Toru?

PostWysłany: Nie Sty 31, 2021 2:00 pm      Temat postu: Odpowiedz z cytatem Pisownia

Sprawdzi?em: twój kod u mnie dzia?a gdy znajduje si? w procedurze CellValueChanged
Kod:
Private Sub DataGridView1_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged

        If Not IsNothing(DataGridView1.CurrentCell) Then
            Dim rowind As Integer = Me.DataGridView1.CurrentCell.RowIndex
            Dim cellind As Integer = Me.DataGridView1.CurrentCell.ColumnIndex
            Dim wpis As String = Me.DataGridView1.CurrentCell.EditedFormattedValue.ToString.Replace(".", ",")

            Me.DataGridView1.Rows(rowind).Cells(cellind).Value = wpis
        End If

    End Sub

Wa?ne jest zabezpieczenie z wiersza 3, bo w momencie uruchamiania programu obiekt CurrentCell jest jeszcze typu Nothing

_________________
Nie zadawaj bezcelowych pyta? / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Bleks



Dołączył: 27 Wrz 2012
Posty: 22

PostWysłany: Nie Sty 31, 2021 7:31 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

W?a?nie od wstawienia tego kodu do zdarzenia CellValueChanged zacz??em, ale niestety to nie dzia?a, poniewa?
w przypadku, gdy wpisz? liczb? z kropk? zamiast przecinka to po klikni?ciu w inn? komórk? nie jest wykonywany CellValueChanged, ale od razu wykonuje DataError.Tam bez problemu zamieniam sobie wpis na prawid?owy, ale nie umiem wstawi? go do edytowanej komórki tak, ?eby si? zmieni? w niej wpis.

Ja mam w DGV jako DataSource wstawione DataTable z pewnymi danymi, które s? automatycznie ?adowane
przy uruchamianiu Formy, a potem ewentualnie mo?na dodawa? nast?pne wiersze.Prawdopodobnie dlatego u ciebie dzia?a a u mnie nie.Zaznaczam, ?e kolumna w DataTable odpowiadaj?ca za dane dla kolumny 2 w DGV
jest typu System.Decimal, poniewa? inaczej w DGV dane nie s? wy?wietlane w formie waluty(z?).
Kod:
Private Sub dgv_DataError(sender As Object, e As DataGridViewDataErrorEventArgs) Handles dgv.DataError


        Dim rowind As Integer = Me.dgv.CurrentCell.RowIndex
        Dim cellind As Integer = Me.dgv.CurrentCell.ColumnIndex
        Dim wpis As String =Me.dgv.CurrentCell.EditedFormattedValue.ToString.Replace(".", ",")
        Me.dgv.Rows(rowind).Cells(cellind).Value = wpis

    End Sub
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 8376
Skąd: Toru?

PostWysłany: Nie Sty 31, 2021 8:39 pm      Temat postu: Odpowiedz z cytatem Pisownia

Tak, s?ysza?em, ?e powiazanie siatki ze ?ród?em danych powoduje niemo?no?? edycji. Mo?e na czas edycji, po za?adowaniu danych, mo?na t? relacj? z baz? danych "roz??czy?" ? Ja z bazami nie mam do?wiadczenia.
A próbowa?e? nie umieszcza? tego kodu w procedurze DataError lecz wstawi? j? tylko w procedurze CellValueChange ?

_________________
Nie zadawaj bezcelowych pyta? / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Bleks



Dołączył: 27 Wrz 2012
Posty: 22

PostWysłany: Pon Lut 01, 2021 1:56 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Cytat:
Tak, s?ysza?em, ?e powiazanie siatki ze ?ród?em danych powoduje niemo?no?? edycji.

Mo?na, ja edytuj?.
Cytat:
Mo?e na czas edycji, po za?adowaniu danych, mo?na t? relacj? z baz? danych "roz??czy?" ?

Po roz??czeniu automatycznie znikaj? wszystkie dane w DGV, które s? tam po za?adowaniu.
Cytat:
A próbowa?e? nie umieszcza? tego kodu w procedurze DataError lecz wstawi? j? tylko w procedurze CellValueChange ?

Pisa?em wy?ej, ?e po wpisaniu liczby z kropk?,lub liter? jest od razu wykonywany kod w DataError.

Po dok?adnym przemy?leniu, doszed?em do wniosku, ?e w moim przypadku w trakcie edycji DGV tak naprawd?
to edytuj? powi?zan? z nim DataTable i okaza?o si?, ?e mia?em racj?.
Zacz??em kombinowa? od strony DataTable i wydaje mi si?, ?e rozwi?za?em problem.
Poni?ej zamieszczam kod w DataError, mo?e komu? si? przyda, chyba ?e kto? ma pomys? na prostszy kod?
Kod:
Private Sub dgv_DataError(sender As Object, e As DataGridViewDataErrorEventArgs) Handles dgv.DataError

        Dim rowind As Integer = Me.dgv.CurrentCell.RowIndex
        Dim cellind As Integer = Me.dgv.CurrentCell.ColumnIndex
        Dim wiersz As DataRow = Me.Tablice_Danych.Tables(0).NewRow
        Dim wpis As String = Me.dgv.CurrentCell.EditedFormattedValue.ToString.Replace(".", ",")

        If Not IsNumeric(wpis) Then

            MessageBox.Show("W Kolumnie 'Koszt' musisz wpisa? Liczb? !!!", "B??d", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub

        End If

        If rowind < Me.Tablice_Danych.Tables(0).Rows.Count Then

            Me.Tablice_Danych.Tables(0).Rows(rowind).Item(cellind) = wpis
            Exit Sub

        End If

        wiersz.Item(cellind - 1) = Me.dgv.CurrentRow.Cells(cellind - 1).Value.ToString
        wiersz.Item(cellind) = wpis

        Me.Tablice_Danych.Tables(0).Rows.Add(wiersz)
        Me.Tablice_Danych.Tables(0).Rows.RemoveAt(rowind + 1)
        Me.dgv.Rows.RemoveAt(rowind + 1)


    End Sub
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 8376
Skąd: Toru?

PostWysłany: Pon Lut 01, 2021 6:21 pm      Temat postu: Odpowiedz z cytatem Pisownia

Przyznam, ?e tej ostatniej twojej wypowiedzi nie rozumiem.
Cytat:
Mo?na, ja edytuj?.
Nie rozumiem, bo wcze?niej napisa?e?, ?e kod nie zamienia kropki na przecinek w komórce siatki? Wi?c co zmieni?e?, ?e teraz mo?esz?

Cytat:
Zacz??em kombinowa? od strony DataTable i wydaje mi si?, ?e rozwi?za?em problem
Czyli co zmieni?e? w DataTable?
_________________
Nie zadawaj bezcelowych pyta? / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Bleks



Dołączył: 27 Wrz 2012
Posty: 22

PostWysłany: Pon Lut 01, 2021 7:52 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Napisa?e?, ?e powi?zanie siatki ze ?ród?em danych powoduje niemo?no?? edycji, dlatego odpisa?em, ?e ja edytuj?(dopiero, gdy wpisywa?em w konkretnej kolumnie "z danymi liczbowymi" liczb? przedzielon? kropk? lub liter? to wtedy nast?powa? b??d).

Co do drugiego pytania to jak mo?esz zauwa?y? w kodzie teraz "zmieniony" b??dny wpis wstawiam bezpo?rednio do DataTable, a nie jak poprzednio próbowa?em go wstawi? do DGV.
Po wstawieniu go do Tablicy, automatycznie jest on wy?wietlany w DGV.Doda?em te? warunki zapobiegaj?ce b??dom, gdy kto? edytuje wcze?niejsze wpisy lub skasuje wpis ju? istniej?cy(wtedy zmienia pust? komórk? na "0").
Na ko?cu jeszcze musia?em doda? kasowanie nadmiarowych wierszy, które pojawiaj? si? w trakcie wstawiania.
Ogólnie ca?a operacja wykonywana jest w Tablicy, a nie w DGV.
U mnie teraz to dzia?a, i mog? w dowolnym miejscu DGV edytowa? komórk?.
My?l?, ?e wyczerpuj?co wyja?ni?em, je?li nie to napisz czego jeszcze nie rozumiesz.
W ka?dym razie dzi?ki za zainteresowanie, bo g?ównie twoja sugestia, ?eby od??czy? ?ród?o danych naprowadzi?a mnie na to rozwi?zanie.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 8376
Skąd: Toru?

PostWysłany: Pon Lut 01, 2021 10:34 pm      Temat postu: Odpowiedz z cytatem Pisownia

Teraz rozumiem.
Natomiast w takich rozmowach o programowaniu na odleg?o?? niezwykle istotna jest precyzja wypowiedzi, o czym przekona?em si? na tym forum wielokrotnie :)

_________________
Nie zadawaj bezcelowych pyta? / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Bleks



Dołączył: 27 Wrz 2012
Posty: 22

PostWysłany: Sro Lut 03, 2021 8:08 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

Chce jeszcze doprecyzowa?, ?e w moim kodzie "Tablice_Danych" to jest DataSet wstawiony do Formularza, a w nim znajduje si? DataTable (Tables(0)), która jest ?ród?em danych dla DGV.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Visual Studio: C#, VB, VC++, … Wszystkie czasy w strefie CET (Europa)
Idź do strony Poprzedni  1, 2
Strona 2 z 2

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.21601 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |