2009-11-17 32 views
7

Czy ktoś może mi powiedzieć, dlaczego otrzymuję puste wiersze po uruchomieniu tego kodu?Uzyskiwanie pustych wierszy po ustawieniu DataGridView.DataSource

... 
dataGridView.AutoGenerateColumns = false; //must be false, else getting additional columns from SQL 
dataGridView.DataSource = dataSet.Tables[0].DefaultView; 

próbował także

dataGridView.Update(); 

ale nie działa.

Liczba wierszy jest w porządku, ale dlaczego otrzymuję puste wiersze?

Używam WinForm.

Odpowiedz

3

co jest zawarte w zestawie danych?

Być może DataTable zawarte w zestawie danych nie ma żadnych wierszy. Zostawię wartość AutoGenerateColumns prawdą i po prostu ręcznie ukryj kolumny, których nie chcesz wyświetlać. Nigdy nie użyłem AutoGenerateColumns = false. Jednak bez większej ilości kodu będzie trudna do zdiagnozowania. Spróbuj zamienić te dwie instrukcje (najpierw .DataSource).

AutoGenerateColumns może nie mieć wpływu na odpowiednie źródło wiązania (DataTable z DataSet).

DataSet musi być wypełnione przez DataAdapter:

// Example 
DataAdapter = new SqlDataAdapter(); 
DataAdapter = CreateInventoryAdapter(); 
DataAdapter.TableMappings.Add("Table", "GARAGE"); 

DataAdapter.Fill(myDataSet); 
myDataView = myDataSet.Tables[0].DefaultView; 
dataGridView1.DataSource = myDataView 
+0

Serdecznie dziękuję za pomoc, ale nie chcę poświęcać więcej czasu na to. Mój rozszerzony kod również działa dobrze, więc nie chcę go już zmieniać. Pozdrawiamy – Jooj

4

Ponadto, jeśli używasz AutoGenerateColumns = false, upewnij się, że dodano kilka oprawionych kolumny, albo dostaniesz pusty wiersz dla każdego rekordu

+0

Czy masz krótki przykład dodawania kolumn związanych? – Jooj

+0

Zobacz post Sorin Comanescu poniżej. To jest sposób na zrobienie tego. – tardomatic

9

spróbować czegoś wzdłuż tych linii:

grid.AutoGenerateColumns = false; 

DataGridViewColumn col = new DataGridViewTextBoxColumn(); 
col.DataPropertyName = "Prop1"; 
col.HeaderText = "Property 1"; 
grid.Columns.Add(col); 

col = new DataGridViewTextBoxColumn(); 
col.DataPropertyName = "Prop2"; 
col.HeaderText = "Property 2"; 
grid.Columns.Add(col); 

grid.DataSource = dataSet.Tables[0].DefaultView; 

Prop1 & Prop2 powinien odpowiadać nazwom kolumn twojej tabeli. Właściwość 1 & Właściwość 2 jest tekstem nagłówka do wyświetlenia.

EDIT:

Z przykład dałeś wygląda łączysz oprawionych kolumny z niezwiązanych kolumn.

Wykonaj:

1.Remove jakieś kolumny dodawane przy użyciu projektanta 2.Dodaj zdjęcia ten kod:

grid.AutoGenerateColumns = false; 

DataGridViewColumn colID = new DataGridViewTextBoxColumn(); 
colID.DataPropertyName = "customerID"; 
colID.HeaderText = "Ident."; 
grid.Columns.Add(colID); 

DataGridViewColumn colName = new DataGridViewTextBoxColumn(); 
colName.DataPropertyName = "customerFirstName"; 
colName.HeaderText = "First name"; 
grid.Columns.Add(colName);  
grid.DataSource = dataSet.Tables[0].DefaultView; 

HTH.

+0

Mój kod działa tak samo jak twój. Tyle tylko, że ustawiam kolumny datagridview w projektancie i pasują one do nazw kolumn mojej tabeli. – Jooj

+0

Następnie, jeśli wiążesz siatkę za pomocą projektanta, a pozyskanie dodatkowych kolumn z sql jest Twoim jedynym zmartwieniem, możesz po prostu uczynić niepożądane kolumny niewidoczne za pomocą projektanta. –

+0

Mogłem uczynić je niewidocznymi, ale dodatkowe nagłówki kolumn różnią się od innych kolumn wykonanych z projektantem. p.s .: To jest dla aplikacji mulitlanguage. – Jooj

1

Ok bardziej rozszerzony przykładowe:

zrobiłem w projektancie niektóre kolumny:

nazwy kolumn: customerID and customerFirstName

kolumna HeaderText: Ident. and First name

następnie uzyskać pewne dane z SQL tabeli ...

sql = "select customerID, customerFirstName From customer;"; 

dataGridView.AutoGenerateColumns = false; 
dataGridView.DataSource = dataSet.Tables[0].DefaultView; 

i kolumny tabeli sql są takie same jak nazwy kolumn w dataGridView.

Rezultat, który otrzymam, gdy dataGridView.AutoGenerateColumns = false; jest dwukolumnowym danymiGridView z headerText Ident. | First name.

Po ustawieniu dataGridView.AutoGenerateColumns = true; otrzymuję kolumny dataGridView w następujący sposób: Ident. | First name | customerID | customerFirstName.

wszystkie wiersze poniżej Ident i First nameempty i wszystko inne poniżej customerID i customerFirstNameok.

Teraz chcę, że wiersze poniżej customerID i customerFirstName byłoby pod Ident i First name i kolumny customerID i customerFirstName powinny być ukryte.

Napisałem ten kod i to działa:

DataTable dTable = dataGridView.GetTable().Tables[0]; 

foreach (DataRow dataRow in dataGridView.GetTable().Tables[0].Rows) 
{ 
    int n = dataGridView.Rows.Add(); 
    foreach (DataColumn dataColumn in dTable.Columns) 
    { 
     dataGridView.Rows[n].Cells[dataColumn.ColumnName].Value = dataRow[dataColumn.ColumnName].ToString(); 
    } 
} 

ale dlaczego DataGridView nie robi to dla mnie zrobić z tym kodem:

dataGridView.DataSource = dataSet.Tables[0].DefaultView;

+0

Czy wypełniłeś swój zestaw danych? DataAdapter = new SqlDataAdapter(); DataAdapter = CreateInventoryAdapter(); DataAdapter.TableMappings.Add ("Tabela", "GARAŻ"); DataAdapter.Fill (myDataSet); myDataView = myDataSet.Tables [0] .DefaultView; dataGridView1.DataSource = myDataView –

14

znalazłem problem.

Zaprojektowałem kolumny w projektowaniu datagridview VS. Nie nazwa kolumny, ale kolumna DataPropertyName musi pasować do pól w bazie danych.

Następnie również powielone kolumny zostaną ukryte.

4

Wiem, że minęło dużo czasu, odkąd to opublikowałeś, ale po prostu miałem ten sam problem i znalazłem odpowiedź, więc pomyślałem, że opublikuję to, aby inni mogli skorzystać.

Powód, dla którego kolumny były puste, jest taki, że należy również ustawić właściwość DataPropertyName każdej z kolumn w projektancie, aby pasowała do nazw pól bazy danych. Samo ustawienie nazwy projektu nie wystarczy.

Mam nadzieję, że komuś pomóż.

1

Me.dgvList.AutoGenerateColumns = False

Dim col = New DataGridViewTextBoxColumn() 
    col.DataPropertyName = "VisitNo" 
    col.HeaderText = "Sr. No." 
    dgvList.Columns.Add(col) 

Działa

0

Spróbuj dodać ten kod przed załadowaniem Siatka

dataGridView.ColumnCount = 0; 
0

Więc miałem zwyczaj wdrożenie gdzie daję użytkowników możliwość zapisywania filtrów podobnych do Excela w kolumnach.

Załadowałem wyniki do siatki, ale nic się nie pojawiło, ponieważ filtr podobny do tego w kolumnie nie mógł niczego dopasować.

Powiązane problemy