2008-11-25 10 views
12

Jak dodać nowy rekord do kontrolki DataGridView w VB.Net?Jak dodać rekordy do DataGridView w VB.Net?

Nie używam zestawu danych ani powiązania z bazą danych. Mam mały formularz z 3 polami i kiedy użytkownik kliknie przycisk OK, powinny one zostać dodane do formantu DataGridView jako nowy wiersz.

Odpowiedz

3

Myślę, że powinieneś zbudować zbiór danych/datatable w kodzie i związać z tym siatkę.

0

Funkcja, której szukasz, to "Wstaw". Przyjmuje jako parametry indeks, który chcesz wstawić, oraz tablicę wartości do użycia dla nowych wartości wiersza. Typowe zastosowanie może obejmować:

myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3}); 

lub coś podobnego.

26

Jeśli chcesz dodać wiersz do końca siatki użyć add() metoda zbierania wierszy ...

DataGridView1.Rows.Add(New String(){Value1, Value2, Value3}) 

Jeśli chcesz wstawić wiersz w partiular pozycji użyj Insert() metodę zbierania wierszy (jak GWLlosa powiedział też) ...

DataGridView1.Rows.Insert(rowPosition, New String(){value1, value2, value3}) 

wiem wspomniałeś nie robiły wiązania z danymi, ale jeśli zdefiniowano silnie wpisany zestawu danych z pojedynczy dat Atable w projekcie, można użyć tego i dostać kilka ciekawych silnie wpisane metody robić te rzeczy, zamiast polegać na metodach sieci ...

DataSet1.DataTable.AddRow(1, "John Doe", true) 
2

Kiedy próbuję rzucić źródło danych z DataGridView, które kiedyś BindingSource nim błąd Accor nie może odlewania:

---------- Rozwiązanie ------------

„Zmieniłem odlewania z BindingSource, które wiążą się z DataGridView

"Kod tutaj

Dim dtdata As New DataTable() 

dtdata = CType(bndsData.DataSource, DataTable) 
0

Jeśli numer DataGridView jest powiązany z DataSet, nie można po prostu dodać nowego wiersza do ekranu DataGridView. Teraz będzie działać poprawnie.

Zamiast tego należy dodać nowy wiersz w DataSet z tym kodem:

BindingSource[Name].AddNew() 

Kod ten będzie także automatycznie dodać nowy wiersz w wyświetlaczu DataGridView.

+0

Czy jesteś pewien, że to prawda? Moje BindingSource nie ma metody "AddNew()'. – acme

0

Jeśli chcesz użyć czegoś bardziej opisowego niż tablica głupi bez konieczności używania DataSet, przydatne mogą okazać się następujące elementy. Nadal nie jest mocno napisany, ale przynajmniej jest sprawdzany przez kompilator i będzie dobrze radził sobie z refaktoryzacją.

Dim previousAllowUserToAddRows = dgvHistoricalInfo.AllowUserToAddRows 
dgvHistoricalInfo.AllowUserToAddRows = True 

Dim newTimeRecord As DataGridViewRow = dgvHistoricalInfo.Rows(dgvHistoricalInfo.NewRowIndex).Clone 

With record 
    newTimeRecord.Cells(dgvcDate.Index).Value = .Date 
    newTimeRecord.Cells(dgvcHours.Index).Value = .Hours 
    newTimeRecord.Cells(dgvcRemarks.Index).Value = .Remarks 
End With 

dgvHistoricalInfo.Rows.Add(newTimeRecord) 

dgvHistoricalInfo.AllowUserToAddRows = previousAllowUserToAddRows 

Warto zauważyć, że użytkownik musi mieć AllowUserToAddRows zgodę lub nie będzie działać. Dlatego przechowuję istniejącą wartość, ustawię ją na true, wykonuję swoją pracę, a następnie resetuję ją do jej stanu.