2012-07-28 118 views
3

伙计们,我是一个在C#中实现ListView的初学者。我在c#.net中遇到了这些代码的问题。我无法弄清楚输出显示的控件中发生了什么。似乎我忘了给ListView控件的属性赋予值。C#ListView显示

第二列值必须出现在第一列。

enter image description here

这是我的代码:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data;     
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms;   
using System.Data.OleDb;    
namespace Database2 
{ 
    public partial class Form1 : Form 
    { 
     OleDbConnection con; 
     OleDbDataAdapter adapter; 
     DataTable table; 

     string conString = "Provider = Microsoft.Jet.OLEDB.4.0.; Data Source=DatabaseTest.mdb"; 
     string sqlQuery = "SELECT * FROM Person"; 

     public Form1() { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e){ 
      con = new OleDbConnection(conString); 
      adapter = new OleDbDataAdapter(sqlQuery,conString); 
      table = new DataTable(); 

      InitializeList(); 

      adapter.Fill(table); 

      for (int i = 0; i < table.Columns.Count; i++) 
       lstDisplay.Columns.Add(table.Columns[i].ColumnName.ToString(), lstDisplay.Width/6-1); 

      for (int i = 0; i < table.Rows.Count; i++) { 
       ListViewItem row = new ListViewItem(); 
       for (int j = 0; j < table.Columns.Count; j++) 
        row.SubItems.Add(table.Rows[i][j].ToString()); 
       lstDisplay.Items.Add(row); 
      } 
     } 

     private void InitializeList() { 
      lstDisplay.GridLines = true; 
      lstDisplay.AllowColumnReorder = true; 
      lstDisplay.LabelEdit = true; 
      lstDisplay.FullRowSelect = true; 
      lstDisplay.Sorting = SortOrder.Ascending; 
      lstDisplay.View = View.Details; 
     } 
    } 
} 

是否有一个ListView属性我忘了给的值?

回答

6

ListViewItem本身代表第一列。后续栏目由ListViewSubItem s表示。

例:

for (int i = 0; i < table.Rows.Count; i++) 
{ 
    ListViewItem row = new ListViewItem(table.Rows[i][0].ToString()); 
    for (int j = 1; j < table.Columns.Count; j++) 
     row.SubItems.Add(table.Rows[i][j].ToString()); 
    lstDisplay.Items.Add(row); 
} 
+1

哇非常感谢。这是我的问题的快速答案。我需要等4分钟才能接受你的答案。 :-上 – Jed 2012-07-28 05:26:11

2

MSDN

ListView控件显示了由ListViewItem的类中定义的项目的列表。每个ListViewItem可以存储由ListViewItem.ListViewSubItem类定义的子项目对象。

ListView.Items代表第一列,ListViewItem.SubItems代表每行的子项。所以你的代码应该是这样的:

for (int i = 0; i < table.Rows.Count; i++) 
{ 
    ListViewItem row = new ListViewItem(table.Rows[i][0].ToString()); 
    for (int j = 1; j < table.Columns.Count; j++) 
    { 
     row.SubItems.Add(table.Rows[i][j].ToString()); 
    } 
    lstDisplay.Items.Add(row); 
}