public static void FillListView(this ListView list, DataTable dt)
        {
            list.BeginUpdate();
            list.Items.Clear();
            int rowCount, columnCount;
            rowCount = dt.Rows.Count;
            columnCount = dt.Columns.Count;
            for (int i = 0; i < rowCount; i++)
            {
                ListViewItem item = new ListViewItem();
                item.Text = dt.Rows[i][0].ToString();                for (int j = 0; j < columnCount; j++)
                {
                    ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem();
                    subItem.Text = dt.Rows[i][j].ToString();
                    item.SubItems.Add(subItem);
                }
                list.Items.Add(item);
            }
            list.EndUpdate();
        }
//测试数据DataTable
        private DataTable GetDataTable()
        {
            // Create a new DataTable.
            System.Data.DataTable table = new DataTable("ParentTable");
            // Declare variables for DataColumn and DataRow objects.
            DataColumn column;
            DataRow row;            // Create new DataColumn, set DataType, 
            // ColumnName and add to DataTable.    
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.Int32");
            column.ColumnName = "id";
            column.ReadOnly = true;
            column.Unique = true;
            // Add the Column to the DataColumnCollection.
            table.Columns.Add(column);            // Create second column.
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "ParentItem";
            column.AutoIncrement = false;
            column.Caption = "ParentItem";
            column.ReadOnly = false;
            column.Unique = false;
            // Add the column to the table.
            table.Columns.Add(column);            column = new DataColumn();
            column.DataType = Type.GetType("System.String");
            column.ColumnName = "Third";
            column.ReadOnly = true;
            //column.Unique = true;
            table.Columns.Add(column);            column = new DataColumn();
            column.DataType = Type.GetType("System.String");
            column.ColumnName = "Four";
            column.ReadOnly = true;
            column.Unique = true;
            table.Columns.Add(column);            // Make the ID column the primary key column.
            DataColumn[] PrimaryKeyColumns = new DataColumn[1];
            PrimaryKeyColumns[0] = table.Columns["id"];
            table.PrimaryKey = PrimaryKeyColumns;            // Instantiate the DataSet variable.
            DataSet dataSet = new DataSet();
            // Add the new DataTable to the DataSet.
            dataSet.Tables.Add(table);            // Create three new DataRow objects and add 
            // them to the DataTable
            for (int i = 0; i <= 2; i++)
            {
                row = table.NewRow();
                row["id"] = i;
                row["ParentItem"] = "ParentItem " + i;
                row["Third"] = "Third" + i;
                row["Four"] = "Four" + i;
                //row["Fri"] = "Fri" + i;
                table.Rows.Add(row);
            }
            return table;
        }为什么显示的数据是下面数据的前四列,而不是后四列的内容?
0 0 ParentItem0 Third0 Four0
1 1 ParentItem1 Third1 Four1
2 2 ParentItem2 Third2 Four2

解决方案 »

  1.   

     private DataTable GetDataTable()
            {
                // Create a new DataTable.
                System.Data.DataTable table = new DataTable("ParentTable");
                // Declare variables for DataColumn and DataRow objects.
                DataColumn column;
                DataRow row;            // Create new DataColumn, set DataType, 
                // ColumnName and add to DataTable.    
                column = new DataColumn();
                column.DataType = System.Type.GetType("System.Int32");
                column.ColumnName = "id";
                column.ReadOnly = true;
                column.Unique = true;
                // Add the Column to the DataColumnCollection.
                table.Columns.Add(column);
                // Create second column.
                column = new DataColumn();
                column.DataType = System.Type.GetType("System.String");
                column.ColumnName = "ParentItem";
                column.AutoIncrement = false;
                column.Caption = "ParentItem";
                column.ReadOnly = false;
                column.Unique = false;
                // Add the column to the table.
                table.Columns.Add(column);            column = new DataColumn();
                column.DataType = Type.GetType("System.String");
                column.ColumnName = "Third";
                column.ReadOnly = true;
                //column.Unique = true;
                table.Columns.Add(column);            column = new DataColumn();
                column.DataType = Type.GetType("System.String");
                column.ColumnName = "Four";
                column.ReadOnly = true;
                column.Unique = true;
                table.Columns.Add(column);            // Make the ID column the primary key column.
                DataColumn[] PrimaryKeyColumns = new DataColumn[1];
                PrimaryKeyColumns[0] = table.Columns["id"];
                table.PrimaryKey = PrimaryKeyColumns;

                // Instantiate the DataSet variable.
                DataSet dataSet = new DataSet();
                // Add the new DataTable to the DataSet.
                dataSet.Tables.Add(table);            // Create three new DataRow objects and add 
                // them to the DataTable
                for (int i = 0; i <= 2; i++)
                {
                    row = table.NewRow();
                    row["id"] = i;
                    row["ParentItem"] = "ParentItem " + i;
                    row["Third"] = "Third" + i;
                    row["Four"] = "Four" + i;
                    //row["Fri"] = "Fri" + i;
                    table.Rows.Add(row);
                }
                return table;
            }
    看看设置主键是否可以直接在column id那直接设置
      

  2.   

    错误出在这:
    for (int i = 0; i < rowCount; i++)
                {
                    ListViewItem item = new ListViewItem();
                    item.Text = dt.Rows[i][0].ToString();
                    //j不应该从0开始循环,应该从1开始
                      //因为dt.Rows[i][0]这个值已经被item.Text显示了
                      //再循环一遍,就会出现第一次出现两次的结果
                      //把 int j=0 修改成 int j=1 应该就行了。
                    for (int j = 0; j < columnCount; j++)
                    {
                        ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem();
                        subItem.Text = dt.Rows[i][j].ToString();
                        item.SubItems.Add(subItem);
                    }
                    list.Items.Add(item);
                }