2013-02-08 60 views
1

我對c#和windows窗體應用程序很陌生。 現在,我想在我的表單中創建一個Datagridview,其行數要填充業務對象的屬性。我遵循這個msdn頁面中的示例:How to: Bind Objects to Windows Forms DataGridView Controls並創建了我自己的程序,但是沒有像在msdn示例中那樣得到類似的結果,而是得到了一個包含三個空行的datagridview。我究竟做錯了什麼?下面是我的程序:在c#中創建一個datagridview窗體#

using System; 
using System.Windows.Forms; 


public class Form3 : Form 
{ 
    private DataGridView dataGridView1 = new DataGridView(); 
    private BindingSource bindingSource1 = new BindingSource(); 

    public Form3() 
    {    
     this.Load += new System.EventHandler(EnumsAndComboBox_Load); 
    } 

    private void EnumsAndComboBox_Load(object sender, System.EventArgs e) 
    { 
     // Populate the data source.   
     bindingSource1.Add(new Test("bli", "bla", "blop", "ha", "ho", "he")); 
     bindingSource1.Add(new Test("bli", "bla", "blop", "ha", "ho", "he")); 

     // Initialize the DataGridView. 
     dataGridView1.AutoGenerateColumns = false; 
     dataGridView1.AutoSize = true; 
     dataGridView1.DataSource = bindingSource1; 

     // Initialize and add a text box column. 
     DataGridViewColumn column = new DataGridViewTextBoxColumn(); 
     column.DataPropertyName = "Name1"; 
     column.Name = "Name1"; 
     dataGridView1.Columns.Add(column); 

     // Initialize and add a check box column. 
     column = new DataGridViewTextBoxColumn(); 
     column.DataPropertyName = "Name2"; 
     column.Name = "Name2"; 
     dataGridView1.Columns.Add(column); 

     column = new DataGridViewTextBoxColumn(); 
     column.DataPropertyName = "Name3"; 
     column.Name = "Name3"; 
     dataGridView1.Columns.Add(column); 

     column = new DataGridViewTextBoxColumn(); 
     column.DataPropertyName = "Name4"; 
     column.Name = "Name4"; 
     dataGridView1.Columns.Add(column); 

     column = new DataGridViewTextBoxColumn(); 
     column.DataPropertyName = "Name5"; 
     column.Name = "Name5"; 
     dataGridView1.Columns.Add(column); 

     column = new DataGridViewTextBoxColumn(); 
     column.DataPropertyName = "Name6"; 
     column.Name = "Name6"; 
     dataGridView1.Columns.Add(column); 

     // Initialize the form. 
     this.Controls.Add(dataGridView1); 
     this.AutoSize = true; 
     this.Text = "DataGridView object binding demo"; 
    } 

    #region "test object" 
    private class Test 
    { 
     private string test1; 
     private string test2; 
     private string test3; 
     private string test4; 
     private string test5; 
     private string test6; 

     public Test(string s1, string s2, string s3, string s4, string s5, string s6) 
     { 
      test1 = s1; 
      test2 = s2; 
      test3 = s3; 
      test4 = s4; 
      test5 = s5; 
      test6 = s6; 
     } 

     public Test() 
     { 
      test1 = "bla"; 
      test2 = "bla"; 
      test3 = "bla"; 
      test4 = "bla"; 
      test5 = "bla"; 
      test6 = "bla"; 
     } 


     public string Test1 
     { 
      get 
      { 
       return test1; 
      } 
      set 
      { 
       test1 = value; 
      } 
     } 

     public string Test2 
     { 
      get 
      { 
       return test2; 
      } 
      set 
      { 
       test2 = value; 
      } 
     } 

     public string Test3 
     { 
      get 
      { 
       return test3; 
      } 
      set 
      { 
       test3 = value; 
      } 
     } 

     public string Test4 
     { 
      get 
      { 
       return test4; 
      } 
      set 
      { 
       test4 = value; 
      } 
     } 

     public string Test5 
     { 
      get 
      { 
       return test5; 
      } 
      set 
      { 
       test5 = value; 
      } 
     } 

     public string Test6 
     { 
      get 
      { 
       return test6; 
      } 
      set 
      { 
       test6 = value; 
      } 
     } 
    } 

    #endregion 

    static class Program 
    { 
     [STAThread] 
     public static void Main() 
     { 
      Application.Run(new Form3()); 
     } 
    } 
} 
+1

弗洛裏安,這條線'dataGridView1.DataSource = bindingSource1後;'檢查以查看是否'dataGridView1.DataBind()'方法是可用.. – MethodMan 2013-02-08 14:35:36

回答

1

要綁定列的屬性稱爲1 Name到6,但在你的對象沒有這樣的特性。將Name更改爲Test。即

從這個:

column = new DataGridViewTextBoxColumn(); 
column.DataPropertyName = "Name6"; 
column.Name = "Name6"; 
dataGridView1.Columns.Add(column); 

這樣:

column = new DataGridViewTextBoxColumn(); 
column.DataPropertyName = "Test6"; 
column.Name = "Name6"; 
dataGridView1.Columns.Add(column); 

也通過建議@noobob您

dataGridView1.DataSource = bindingSource1; 

移到方法

+0

更改 column.DataPropertyName = 「NameX」; 至 column.DataPropertyName =「TestX」; 解決了問題。 謝謝 – FloHe 2013-02-08 14:56:10

1

結束「 DataPropertyName「屬性的每個col umn必須與正在評估的數據對象的屬性名稱匹配。所以,如果你只是做出這樣一個微小的變化:

column.DataPropertyName = "Test1"; 

一切都應該工作。

+0

更改column.DataPropertyName =「NameX」;到column.DataPropertyName =「TestX」;解決了這個問題。 – FloHe 2013-02-08 15:02:23

0

column.DataPropertyName應該設置爲您在數據源類中指定的屬性名稱。嘗試此:

column = new DataGridViewTextBoxColumn(); 
    column.DataPropertyName = "Test1"; 
    column.Name = "Test1"; 
    dataGridView1.Columns.Add(column); 

    column = new DataGridViewTextBoxColumn(); 
    column.DataPropertyName = "Test2"; 
    column.Name = "Test2"; 
    dataGridView1.Columns.Add(column); 

    column = new DataGridViewTextBoxColumn(); 
    column.DataPropertyName = "Test3"; 
    column.Name = "Test3"; 
    dataGridView1.Columns.Add(column); 
+0

更改column.DataPropertyName =「NameX」;到column.DataPropertyName =「TestX」;解決了這個問題。 – FloHe 2013-02-08 15:01:34

+0

@FlorianHeld我很高興它有幫助。您可以標記任何已接受的答案和/或Upvote。 – AbZy 2013-02-08 15:13:38

相關問題