2011-11-18 44 views
1

在我的Windows窗體應用程序中,我有一個DataGridView,它將通過代碼後面的DataTable以編程方式綁定。我一直這樣做了很多個星期,但這是因爲我沒有在DGV設計器中手動指定列和列類型 - 所以列綁定時會自動創建列。綁定DataTable到DataGridView的問題 - 我錯過了一個步驟嗎?

一旦我手動提供列名稱和列名稱,並將DGV的AutoGenerateColumns屬性設置爲false,那麼在綁定後DGV中總是隻有1行,並且所有值都爲空 - 所以它看起來像我的DataTable中的值似乎沒有映射到DGV。我確保DGV中列的名稱與我的DataTable中列的名稱匹配。

任何想法?下面是一些代碼(在此刻所以這裏不能複製和粘貼任何代碼是什麼,我有一個大概的瞭解):

DataTable dt = new DataTable(); 
dt.Columns.Add("ID",typeof(long)); 
//etc... 

var linqQuery = //perform linq query to get data 

foreach (var data in linqQuery) 
{ 
    dt.Rows.Add(data.ID,//etc); 
} 

dgv.DataSource = dt; 
+0

如果您使用LINQ來選擇所有相關數據,那麼您可以將DataSource屬性設置爲linqQuery嗎? – Balthy

回答

1

我自己的白癡在這裏。我沒有設置DataPropertyName。 D'哦。謝謝!

1

既然你打開你的AutoGenerateColumns需要設置DataPropertyName在您DGV每一列添加到數據源中的匹配列名稱。

0

你可以嘗試這樣的..for映射數據網格視圖的列數據表..

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace TestWinApp 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     }  
     private void Form1_Load(object sender, EventArgs e) 
     { 
      DataSet dsPlayerList = new DataSet(); 
      DataTable dt = new DataTable("PlayerList"); 
      dsPlayerList.Tables.Add(dt); 

      dt.Columns.Add("ID",typeof(int)); 
      dt.Columns.Add("Name",typeof(string)); 
      dt.Columns.Add("Type", typeof(string)); 
      dt.Columns.Add("IP", typeof(string)); 

      DataRow dr = dt.NewRow(); 
      dr["ID"] = 1; 
      dr["Name"] = "Player 1"; 
      dr["Type"] = "Standard"; 
      dr["IP"] = "127.0.0.1"; 
      dt.Rows.Add(dr); 

      dr = dt.NewRow(); 
      dr["ID"] = 2; 
      dr["Name"] = "Player 2"; 
      dr["Type"] = "Standard"; 
      dr["IP"] = "127.0.0.1"; 
      dt.Rows.Add(dr); 

      dt.AcceptChanges(); 

      this.dgvPlayerList.AutoGenerateColumns = false;  
      DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn(); 
      col.DataPropertyName = "Name"; 
      col.Name = "Name"; 
      col.HeaderText = "Name";     
      this.dgvPlayerList.Columns.Add(col); 

      col = new DataGridViewTextBoxColumn(); 
      col.DataPropertyName = "Type"; 
      col.Name = "Type"; 
      col.HeaderText = "Type";  
      this.dgvPlayerList.Columns.Add(col); 

      this.dgvPlayerList.DataSource = dsPlayerList.Tables["PlayerList"];    
     }   
    } 
} 
相關問題