C#datatable to listview

我希望能够以windowsforms查看数据表

我设法只使用ListView获取标题如何获取数据

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

我只想在那里显示数据!

干杯

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

更新:另外,如果您多次调用方法,则需要在添加列之前清除列集合,或者检查列是否已添加 - 否则,列数将继续增加你打电话给你的方法。

我一直在寻找解决方案,但我失败了。 我无法找到最能解决这个问题的方法,所以我自己做了解决方案。 我很高兴我能够使这个解决方案变得更短,更容易,更容易理解,但最能满足我们大多数人的需求。

  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.减少闪烁

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