2009-11-17 17 views
7

Birisi bana bu kodu çalıştırdıktan sonra neden boş satırlar aldığımı söyler mi? DataGridView.DataSource ayarlandıktan sonra boş satırlar alın

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

Ayrıca çalışma
dataGridView.Update(); 

ancak çalıştı.

Satır sayısı tamam, ancak neden boş satırlar alıyorum?

Winform'ları kullanıyorum. Ayrıca

cevap

3

bulunur? Belki de DataSet'inizde bulunan DataTable'ın hiç satır içermiyordur. AutoGenerateColumns'ı doğru olarak bırakıp yalnızca görmek istemediğiniz sütunları el ile gizlerim. Hiç AutoGenerateColumns = false kullanmamıştım. Ancak, daha fazla kod olmadan, teşhis etmek zor olacak. Bu iki ifadeyi değiştirmeyi deneyin (ilk önce .DataSource).

AutoGenerateColumns, karşılık gelen bağlanma kaynağı (DataSet'ten DataTable) üzerinde hiçbir etkiye sahip olmayabilir.

DataSet DataAdapter tarafından doldurulması gerektiği için:

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

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

Yardımlarınız için teşekkürler, ancak buna daha fazla zaman harcamak istemiyorum. Genişletilmiş kodum da iyi çalışıyor, bu yüzden artık değiştirmek istemiyorum. Saygılarımızla – Jooj

4

, sen AutoGenerateColumns kullanıyorsanız = false, bazı ilişkili sütun eklemiş emin olun, yoksa bu satırlar boyunca

+0

Bağlanan sütunlar ekleme hakkında kısa bir örnek var mı? – Jooj

+0

Sorin Comanescu'nun yazısı aşağıya bakın. Bunu yapmanın yolu. – tardomatic

9

deneyin şey her kayıt için boş bir satır alacak:

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, tablonuzun sütun adlarıyla eşleşmelidir. Özellik 1 & Özellik 2 görüntülenecek başlık metindir.

DÜZENLEME: Eğer ilişkisiz sütunlarla ilişkili sütun birleştirerek anlaşıldığından verdi örnekten

.

yapın:

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:

1.Remove sütunlar tasarımcı 2.Add Bu kod kullanılarak ekledi.

+0

Kodum sizinkiyle aynı şeyi yapıyor. Sadece tasarımcıda datagridview sütunlarını belirledim ve tablolarımın sütun adları ile eşleşiyorlar. – Jooj

+0

Daha sonra, ızgarayı tasarımcıyı kullanarak bağlamanız ve sql'den ek sütunlar almanız tek endişeniz ise, istenmeyen sütunları tasarımcıyı kullanarak görünmez hale getirebilirsiniz. –

+0

Onları görünmez yapabilirdim ancak ek sütun başlığı metinleri tasarımcıyla yapılan diğer sütunlardan farklı. p.s .: Bu bir mulitlanguage uygulaması içindir. – Jooj

1

Tamam bir daha genişletilmiş örnek:

Ben tasarımcı yapılan bazı sütunlar:

sütun isimleri: customerID and customerFirstName

kolon headerText: Ident. and First name

sonra sql tablosundan bazı verileri almak ...

ve sql tablonun sütunları dataGridView'daki sütun adları ile aynıdır.

dataGridView.AutoGenerateColumns = false;, headerText Ident. | First name ile iki sütun dataGridView olduğunda elde edilen sonuçtur.

dataGridView.AutoGenerateColumns = true;'u ayarladığımda, dataGridView sütunlarını şu şekilde alırım: Ident. | First name | customerID | customerFirstName. Ident ve First name altında

tüm satırları empty ve customerID ve customerFirstName altındaki tüm diğer ok bulunmaktadır.

Şimdi Ident ve First name ve kolonlar customerID ve customerFirstName gizli olmalıdır altında customerID ve customerFirstName altında satırlar olacağını istiyorum.

Bu kodu yazmış ve çalışır: Bu kod ile bunu benim için yap neden DataGridView dosen't

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(); 
    } 
} 

Ama: DataSet ne

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

+0

DataSet'inizi doldurdunuz mu? DataAdapter = new SqlDataAdapter(); DataAdapter = CreateInventoryAdapter(); DataAdapter.TableMappings.Add ("Tablo", "GARAJ"); DataAdapter.Fill (myDataSet); myDataView = myDataSet.Tables [0] .DefaultView; dataGridView1.DataSource = myDataView –

14

sorun buldum.

VS datagridview tasarımında sütunlar tasarladım. Sütun adı değil, DataPropertyName sütunu, veritabanındaki alanlarla eşleşmelidir.

Ardından, çoğaltılan sütunlar gizlenecektir.

4

Bunu yayınladığınızdan bu yana çok uzun zaman geçti, ama aynı problemi çözdüm ve cevabı çözdüm, bu yüzden başkalarının faydalanabilmesi için yayınlayacağımı düşündüm.

Sütunlarınızın boş olmasının nedeni, veritabanı alan adlarınızla eşleşmesi için tasarımcıdaki sütunların her birinin DataPropertyName değerini ayarlamanız gerektiğinden de kaynaklanmaktadır. Sadece tasarım ismini ayarlamak yeterli değil. kimse yardımcı

Umut.

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

O Izgara

dataGridView.ColumnCount = 0; 
1

Me.dgvList.AutoGenerateColumns = Ben de kullanıcılara vermek özel bir uygulama vardı sütunların excel benzeri filtrelerini kaydetme yeteneği.

Sonuçları bir kılavuza yükledim, ancak bir sütundaki excel benzeri filtre bir şeyle eşleşemediğinden hiçbir şey görünmedi.

0

deneyin çalışır Yanlış

0

yüklemeden önce bu kodu ekleyerek

İlgili konular