2012-06-13 54 views
0

我有一个自定义对象的列表,我想将其扔到我的窗体上的DataGridView中。对象从Excel电子表格中解析。我试着做我的解析,然后设置DataGridView.DataSource,但没有骰子 - 它总是显示一个灰色的框!DataGridView从列表加载时显示灰色框<T>

public Critr() 
    { 
     InitializeComponent(); 
     pLogSheet = LogParser.ParseExcelLog("C:\\working.xlsx"); 
    } 

    private void Critr_Load(object sender, EventArgs e) 
    { 
     dgvLogEntries.AutoGenerateColumns = true; 
     dgvLogEntries.DataSource = pLogSheet.Entries; 
    } 

当我调试,我可以看到我的pLogSheet.Entries其实充满,它有三行数据。

enter image description here

+0

在设置数据源后,您是否尝试过在dgv上调用'Refresh()'?另外,请确保[AutoGenerateColumns](http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.autogeneratecolumns.aspx)属性设置为true? – Bridge

+0

@Bridge刚刚尝试过,仍然是一个灰色的盒子。我还通过'dgvLogEntries.AutoGenerateColumns = true'将AutoGenerateColumns设置为true,也没有结果。 –

+0

如果你用这样的代码设置它,你确定你在设置数据源之前设置了这个属性? – Bridge

回答

1

我的班级设置有问题。该类的字段不被DataGridView识别,但属性是。所以我把我的领域转换成了属性,它效果很好!

class LogEntry 
{ 
    public string foo; 
    public string bar; 

    public string fooP { get { return foo; } } 
    public string barP { get { return bar; } } 
} 
0

这适用于List<T>。您可以复制粘贴并尝试。有一个新的Winforms项目和拖放一个DataGridView control

然后,你可以映射你的pLogSheet.Entries w.r.t. List<Books>

using System.Collections.Generic; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public class Books 
    { 
     public string Title { get; set; } 
     public int TotalRating { get; set; } 
    } 

    public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      var list = new List<Books> 
          { 
           new Books() {Title = "Harry Potter", TotalRating = 5}, 
           new Books() {Title = "C#", TotalRating = 5} 
          }; 
      InitializeComponent(); 
      dataGridView1.AutoGenerateColumns = true; 
      dataGridView1.DataSource = list; 
     } 

    } 
}