logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak edytować i usuwać rekordy w DataGridView z SQL Server 2005?

the_man 27 Mar 2009 15:01 3224 9
REKLAMA
  • #1 6340140
    the_man
    Poziom 10  
    Posty: 20
    Mam problem Pomóżcie.

    Robie aplikacje w ktorej mam dodać pracownika, modyfikować i usunąć z bazy danych (SQL Server 2005). W bazie stworzyłem odpowiednie procedury zmieniajace dane w tabelach po dostarczeniu odpowienich zmiennych wejsciowych z textBoxów. Procedura działa. Wynik czyli cała tabele pracowników wraz z tym nowo dodanym wyświetlam w DataGridView z kreatora wybrałem server odpowiedni widok, kolumny potem tylko Fill i pieknie pojawiaja sie dane pracowników. I teraz moj probelm i pytanie: Jak zrobić modyfikacje lub usunąc rekord wybrany przez urzytkownika. Wylaczylem opcje bezposrednio w DataGridView ze mozna usuwac i edytowac rekordy gdyż operuje na widoku a nie bezposrednio na danych z tabeli z tego samego powodu BindingNavigator sie nie nadaje. Ja to widze tak: Urzytkownik widzi w DataGridView wsyztskich pracownikow powiedzmy ze zaznacza sobie jakis caly rekord lub jedna z komórek (np.pesel). Zczytuje wartość pesel do zmiennej i szukam w bazie takiego pracownika ktory ma taki pesel? tylko jak zczytać zaznaczoną wartość w DataGridView do jakiejs zmiennej???? moze znacie inne rozwiazanie. Prosze o pomoc.

    Regulamin, p. 11. - poprawiłem temat.
    Proszę sprawdzić pisownię i poprawić post.
    [Dr.Vee]
  • REKLAMA
  • Pomocny post
    #2 6340287
    MiL999
    Poziom 26  
    Posty: 1173
    Pomógł: 59
    Ocena: 74
    Ustaw zaznaczanie calego wiersza w DataGrid zamiast pojedynczych komórek. W jedną z kolumn wstawiaj klucz główny tabeli z pracownikami, dodaj np. przycisk Usuń i po jego wcisnieciu odczytaj ten identyfikator z zaznaczonego wiersza tabeli i wykonaj na bazie zapytanie DELETE FROM .... WHERE ..... = wartosc.
  • #3 6340546
    the_man
    Poziom 10  
    Posty: 20
    Tak dokładnie o to mi chodzi tylko nie wiem jak robic to kodem: przypisać id_pracownika do zmiennej z zaznaczonego wiersza w DataGrid.
    nie wiem jak to napisac moze cos takiego ale nie chyba nie...

    id_pracownika = me.DataGrid.SelectedRow.copyTo. ... ????
  • REKLAMA
  • #4 6341150
    mykhaylo
    Poziom 14  
    Posty: 102
    Pomógł: 5
    Ocena: 5
    Przykład w C#:
    
                SqlCommand command = new SqlCommand();
                command.CommandText = "DELETE FROM Pracownik WHERE ID_PRACOWNIKA = @ID";
                command.Connection = null;//Podajesz polaczenie
                SqlParameter parameterID = new SqlParameter();
                parameterID.ParameterName = "@ID";
                parameterID.Value = 1;//id
                
    
  • REKLAMA
  • #5 6341383
    the_man
    Poziom 10  
    Posty: 20
    Nie do konca o to mi chodzi: Podstawowa rzecz której nie wiem to: Jak pobrać wartość zaznaczonej komórki z kontrolki DataGridView???????????????
  • REKLAMA
  • #6 6341897
    mykhaylo
    Poziom 14  
    Posty: 102
    Pomógł: 5
    Ocena: 5
    A sprawdzałeś jakie właściwości ma ta klasa ? Może SelectedRows Ci pomoże ?
  • #7 6344895
    the_man
    Poziom 10  
    Posty: 20
    tak sprawdziłem wlasciwosci klasy i fakt ma SelectedRow ale po kropce pojawia sie. Contains, CopyTo, Count, GetEnumerator, IsReadOnly,Item i SyncRoot i czego użyć i jak?
  • #8 6345199
    ~sojer
    Poziom 27  
    Posty: 921
    Pomógł: 91
    Ocena: 24
    SelectedRow zwraca tablicę (wszystkie zaznaczone wiersze).
    Musisz zrobić SelectedRow[0] - pierwsza wartość z tabeli.
  • #9 6345930
    mykhaylo
    Poziom 14  
    Posty: 102
    Pomógł: 5
    Ocena: 5
    Możliwy sposób dostępu(C#):
    
                dataGridView.MultiSelect = false; //tylko jeden wiersz mozna zaznaczyc
                if (dataGridView.SelectedRows.Count > 0)
                {
                    DataGridViewRow row = dataGridView.SelectedRows[0];
                    foreach (DataGridViewCell cell in row.Cells)
                    {
                        Console.WriteLine(cell.Value.ToString());
                    }
                }
    
  • #10 6362000
    the_man
    Poziom 10  
    Posty: 20
    Rozwiazanie:

    Dim wartosc As String
    wartosc = Me.dv_pracownicy.CurrentRow.Cells(1).Value()

    zmienna wartość będzieła miała w sobie wartość 2 komrki zaznaczonego wiersza.

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji edycji i usuwania rekordów pracowników w aplikacji korzystającej z DataGridView oraz bazy danych SQL Server 2005. Autor posiada procedury składowane do modyfikacji danych, a dane są wyświetlane w DataGridView za pomocą wypełniania (Fill) z widoku serwera. Problem polega na tym, że DataGridView jest powiązany z widokiem, a nie bezpośrednio z tabelą, więc wyłączono możliwość bezpośredniej edycji i usuwania w kontrolce oraz nie można użyć BindingNavigator. Rozwiązaniem jest umożliwienie użytkownikowi zaznaczenia całego wiersza w DataGridView, odczytanie klucza głównego (np. ID pracownika lub PESEL) z zaznaczonego wiersza, a następnie wykonanie odpowiedniego zapytania SQL DELETE lub UPDATE na bazie danych. Wskazano, że właściwością DataGridView do pobrania zaznaczonego wiersza jest SelectedRows, która zwraca kolekcję zaznaczonych wierszy; aby uzyskać pojedynczy wiersz, należy użyć SelectedRows[0]. Przykładowy kod w C# pokazuje, jak ustawić MultiSelect na false, pobrać pierwszy zaznaczony wiersz i odczytać wartości komórek. W Visual Basic podano przykład pobrania wartości z konkretnej komórki zaznaczonego wiersza za pomocą CurrentRow.Cells(index).Value. Podsumowując, kluczowe jest ustawienie zaznaczania całych wierszy, pobranie identyfikatora z zaznaczonego wiersza i wykonanie zapytania SQL na bazie danych w celu modyfikacji lub usunięcia rekordu.
Wygenerowane przez model językowy.
REKLAMA