2010-05-04 20 views
6

Ben pencere şeklinde Datatable görebilmesini ister ListView için şimdi oradaki veriler!C# datatable

şerefe

cevap

14
foreach (DataRow row in data.Rows) 
{ 
    ListViewItem item = new ListViewItem(row[0].ToString()); 
    for (int i = 1; i < data.Columns.Count; i++) 
    { 
     item.SubItems.Add(row[i].ToString()); 
    } 
    listView_Services.Items.Add(item); 
} 

Güncelleme: Eğer birden fazla kez yöntemini çağırarak eğer ayrıca, sütunların olup olmadığını görmek için sütunları eklemeden önce sütunlar koleksiyonu temizlemek ya kontrol etmek ya da ihtiyaç zaten eklendi - aksi takdirde, yönteminizi her aradığınızda sütun sayısı artacaktır.

+0

güzel 3. az titreşim, ama benim ilk satır boş !!! –

+0

Veritabanınızda boş bir veri satırınız olduğu anlamına mı geliyor? – MusiGenesis

+0

Yoksa ilk * sütun * boş mu demek istiyorsun? – MusiGenesis

0
DataTable sample = new DataTable(); //Sample Data 
      sample.Columns.Add("Subject", typeof(string)); 
      sample.Columns.Add("Location", typeof(string)); 
      sample.Columns.Add("StartTime", typeof(DateTime)); 
      sample.Columns.Add("EndTime", typeof(DateTime)); 
      sample.Columns.Add("StartDate", typeof(DateTime)); 
      sample.Columns.Add("EndDate", typeof(DateTime)); 
      sample.Columns.Add("AllDayEvent", typeof(bool)); 
      sample.Columns.Add("Body", typeof(string)); 
listViewContacts.Items.Clear(); 

foreach (DataRow dr in sample.Rows) 
      { 
       DataRow row = sample.NewRow(); 
       row["Subject"] = dr.Subject; 
       row["Location"] = dr.Location; 
       row["StartTime"] = dr.Start.TimeOfDay.ToString(); 
       row["EndTime"] = dr.End.TimeOfDay.ToString(); 
       row["StartDate"] = dr.Start.Date; 
       row["EndDate"] = dr.End.Date; 
       row["AllDayEvent"] = dr.AllDayEvent; 
       row["Body"] = dr.Body; 
       sample.Rows.Add(row); 
      } 
      sample.AcceptChanges(); 
      foreach (DataRow dr in sample.Rows) 
       { 
        ListViewItem lvi = new ListViewItem(dr["Subject"].ToString()); 

        lvi.SubItems.Add(dr["Location"].ToString()); 
        lvi.SubItems.Add(dr["StartTime"].ToString()); 
        lvi.SubItems.Add(dr["EndTime"].ToString()); 
        lvi.SubItems.Add(dr["StartDate"].ToString()); 
        lvi.SubItems.Add(dr["EndDate"].ToString()); 
        lvi.SubItems.Add(dr["AllDayEvent"].ToString()); 
        lvi.SubItems.Add(dr["Body"].ToString()); 



        this.listViewContacts.Items.Add(lvi); 
       } 
1

Bunun için bir çözüm arıyorum ama başarısız oldum. Bu soruna en iyi şekilde cevap verebilecek bir şey bulamadım, bu yüzden kendi çözümümü kendim yaptım. Bu çözümü daha kısa, daha kolay ve daha anlaşılır bir hale getirebildiğime, çoğumuzun aradığı şeylere en iyi şekilde cevap verebileceğime çok sevindim.

public void ShowCurrentParked() 
    { 
     dt3 = new DataTable(); 

     dt3.Clear(); //clear to avoid overlapping data (new DataTable is not enough) 

     lstViewShowCurrentParked.Items.Clear(); //clear items to accept new or updated data to avoid overlapping/duplicate data 

     dt3 = pBAL.ShowCurrentParked(); //datasource (class) 
     for (int j = 0; j < dt3.Rows.Count; j++) 
     { 
      lstViewShowCurrentParked.BeginUpdate(); 
      lstViewShowCurrentParked.Items.Add(new ListViewItem(new string[] {dt3.Rows[j][1].ToString(),dt3.Rows[j][2].ToString(), 
     dt3.Rows[j][3].ToString()})); 
     } 

     lstViewShowCurrentParked.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 
     lstViewShowCurrentParked.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 

     lstViewShowCurrentParked.EndUpdate(); 

     dt3.Clear(); //clear again to avoid overlapping data (new DataTable is not enough) .. to make datatable really empty 


     //BeginUpdate and EndUpdate will just lessen the flicker during listview update 
    } 

Verimlilik: 1. hızlı 2. önlemek veri çoğaltma