2012-01-11 38 views
0

我有下面的代码,但DatGridView显示我空行。我找不到解决方案。我已将AutoGenerateColumns设置为false。如果我将它设置为true,它会创建行,但我不允许将此属性设置为true(客户端希望)。winForms + DataGridView绑定到列表<T>(Visual Studio 2005,C#2.0)

我在做什么错?下面的代码:

public partial class Form1 : Form 
{ 
    private List<AStruct> _aCollectionList; 
    private BindingList<AStruct> _aCollectionBindingList; 

    public struct AStruct 
    { 
     public string ACode 
     { 
      get { return _aCode; } 
      set { _aCode = value; } 
     } 

     public string AName 
     { 
      get { return _aName; } 
      set { _aName = value; } 
     } 

     private string _aCode; 
     private string _aName; 
    } 

    public Form1() 
    { 
     InitializeComponent(); 
     this.dataGridView1.AutoGenerateColumns = false; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _aCollectionList = new List<AStruct>(); 
     FillCollectionStruct(true); 

     dataGridView1.DataSource = _aList; 
     dataGridView1.Refresh();    
    } 

    private void button2_Click(object sender, EventArgs e) 
    {    
     _aCollectionBindingList = new BindingList<AStruct>(); 
     FillCollectionStruct(false); 
     dataGridView1.DataSource = _aBindingList; 
     dataGridView1.Refresh();   
    } 

    private void FillCollectionStruct(bool listBool) 
    { 
     AStruct aStruct = new AStruct(); 

     for (int i = 0; i < 10; i++) 
     { 
      aStruct.ACode = i.ToString(); 
      aStruct.AName = i.ToString(); 

      if (listBool) 
       _aCollectionList.Add(aStruct); 
      else 
       _aCollectionBindingList.Add(aStruct); 
     } 
    } 
} 

在Form1.Designer我做出以下栏目:

// aCodeColumn 
// 
this.colorCodeColumn.DataPropertyName = "Code"; 
this.colorCodeColumn.HeaderText = "a code"; 
this.colorCodeColumn.Name = "aCodeColumn"; 
// 
// aNameColumn 
// 
this.colorNameColumn.DataPropertyName = "Name"; 
this.colorNameColumn.HeaderText = "a name"; 
this.colorNameColumn.Name = "aNameColumn"; 

要:

// 
// aCodeColumn 
// 
this.colorCodeColumn.DataPropertyName = "Code"; 
this.colorCodeColumn.HeaderText = "a code"; 
this.colorCodeColumn.Name = "aCodeColumn"; 
// 
// aNameColumn 
// 
this.colorNameColumn.DataPropertyName = "Name"; 
this.colorNameColumn.HeaderText = "a name"; 
this.colorNameColumn.Name = "aNameColumn"; 
+0

为什么客户端不想看到自动生成的行?这些是数据。他不想看到数据? – Tigran 2012-01-11 08:00:36

+0

在已存在的列中: – Remco 2012-01-11 08:05:42

+0

SO在以下列中:// // aCodeColumn // this.colorCodeColumn.DataPropertyName =“Code”; this.colorCodeColumn.HeaderText =“a code”; this.colorCodeColumn.Name =“aCodeColumn”; // // aNameColumn // this.colorNameColumn.DataPropertyName =“Name”; this.colorNameColumn.HeaderText =“a name”; this.colorNameColumn.Name =“aNameColumn”; – Remco 2012-01-11 08:06:15

回答

0

你就不能更改从绑定

// aCodeColumn 
// 
this.colorCodeColumn.DataPropertyName = "ACode"; 
this.colorCodeColumn.HeaderText = "a code"; 
this.colorCodeColumn.Name = "aCodeColumn"; 
// 
// aNameColumn 
// 
this.colorNameColumn.DataPropertyName = "AName"; 
this.colorNameColumn.HeaderText = "a name"; 
this.colorNameColumn.Name = "aNameColumn"; 

不应该这样工作吗?

由于DataPropertyName是绑定到您的属性的名称必须是相同的,否则编译器无法知道什么去了哪里。

+1

这解决了这个问题,DataPropertyName是不一样的。 – Remco 2012-01-11 08:21:22

+0

好,很高兴帮助! – Jontatas 2012-01-11 08:25:50

0

如果我理解你的问题,你可以使用这样的东西像this.dataGridView1.Refresh();为了重新填充它并在刷新的行之前放置this.dataGridView1.DataSource = _aCollectionBindingList;

+0

如果DataPropertyName无效,仍然无法正常工作... – Jontatas 2012-01-11 08:20:43

+0

好的,这里的问题是DataGridView的“DataPropertyName”没有设置正确。通过给这个正确的名字它的作品。 Thnx全部为您的答案。 – Remco 2012-01-11 08:48:43

相关问题