2010-05-04 76 views
6

我希望能夠在窗口的形式查看數據表C#的DataTable到的ListView

我管理只ListView控件如何讓數據在那裏

DataTable data = new DataTable(); 

data = EnumServices(); 

//create headers 
foreach (DataColumn column in data.Columns) 
{ 
     listView_Services.Columns.Add(column.ColumnName); 
} 

我只是想展現給獲得頭現在的數據在那裏!

歡呼

回答

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

更新:另外,如果你調用你的方法不止一次,你需要添加列之前,要麼清除列集合,或檢查,看看是否列有已被添加 - 否則,每次調用您的方法時列的數量都會不斷增加。

+0

不錯,但我的第一行是空的! – 2010-05-04 12:39:04

+0

我認爲這意味着你的數據庫中有一行空白的數據? – MusiGenesis 2010-05-04 12:41:33

+0

還是你的意思是第一列*是空的? – MusiGenesis 2010-05-04 12:42:27

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

我一直在尋找解決方案,但我失敗了。我無法找到任何能夠最好地解決這個問題的方法,所以我提出了自己的解決方案。我非常高興能夠讓這個解決方案變得更短,更簡單,更易於理解,而且最能滿足我們大多數人的需求。

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 
    } 

效率: 1.快速 2.避免數據重複 3.少閃爍