【问题标题】:C#: Datagridview not displaying the dataC#:Datagridview 不显示数据
【发布时间】:2011-04-29 06:32:29
【问题描述】:

我正在开发 winforms 应用程序。在我的表单上,我只需拖放一个 DataGridView 控件,然后使用属性窗口设置它的一些属性。以下是我用来填充我的 DataGridView 的代码。我在构造函数中编写了这段代码。

List<MyCustomClass> lst = new List<MyCustomClass>();
lst = LoadList(/*some params here*/);//now uptil this point everything works i.e the list contains values as desribed.
dataGridView1.DataSource = lst;

问题是当我运行程序时,我的 DataGridView 中没有显示任何内容。

关于更多细节,下面的代码代表了我使用属性窗口设置的属性

        this.dataGridView1.AllowUserToAddRows = false;
        this.dataGridView1.AllowUserToDeleteRows = false;
        this.dataGridView1.AllowUserToResizeRows = false;
        this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
        this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
        this.dataGridView1.BackgroundColor = System.Drawing.Color.White;
        this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.dataGridView1.GridColor = System.Drawing.Color.White;
        this.dataGridView1.Location = new System.Drawing.Point(2, 329);
        this.dataGridView1.Margin = new System.Windows.Forms.Padding(2);
        this.dataGridView1.MultiSelect = false;
        this.dataGridView1.Name = "dataGridView1";
        this.dataGridView1.RowHeadersVisible = false;
        this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
        this.dataGridView1.Size = new System.Drawing.Size(334, 106);
        this.dataGridView1.TabIndex = 0;

【问题讨论】:

  • 检查 AutoGenerateColumns 属性,尝试将其设置为 true
  • 为什么人们在回答之前看不到标签。本帖与 ASP.NET 无关
  • @Jame 你检查过房产吗?
  • @V4Vendetta 是的,但在我的情况下它不起作用。我添加以下行 dataGridView1.AutoGenerateColumns = true;此行上方:dataGridView1.DataSource = lst;
  • @Jame:你的代码中一定还有其他东西是罪魁祸首。我刚刚尝试了带有 datagridview 和自定义类列表的简单表单,它工作正常。您可以使用简单的示例应用程序进行检查。

标签: c# winforms datagridview


【解决方案1】:

我今天遇到了几乎相同的事情,问题是我的班级有公共字段,而不是属性,因为我已经将它们更改为公共自动属性 ​​- 对我来说效果很好。

【讨论】:

  • 有同样的问题,我认为 MS 的文档应该强调它不适用于字段。事后似乎很明显,因为它必须使用反射来获取字段,但之后一切都很容易。
【解决方案2】:

您必须为您的数据网格创建数据列。确保您还使用受尊重的 DataSource 项的属性(即“MyCustomClass”类的属性)设置了每列的“DataPropertyName”属性。

【讨论】:

  • 谢谢!我是 C# 新手,我一直忘记属性是一回事。正是出于这个原因,我遇到了这个问题。
【解决方案3】:

在分配数据源之前添加这段代码,你应该没问题

dataGridView1.AutoGenerateColumns = true;

编辑

还要检查您是否有公共属性,这些属性可用于将 Class 的内容显示为 DataGridView 中的列

【讨论】:

  • AutoGenerateColumns 的默认值只有 true,如果他没有碰过它,那么再次分配 true 是没有意义的。
  • @JPReddy 非常正确.. 但没有提到他是否改变了它的价值
【解决方案4】:

当我在设计器中绑定时遇到同样的问题。但是如果我在构造函数中绑定它会很好地工作

dataGridView1.DataSource = personBindingSource;
personBindingSource.DataSource = persons;

【讨论】:

    【解决方案5】:

    就我而言,我没有获取属性的方法!

    【讨论】:

      【解决方案6】:

      我遇到了完全相同的问题。这通常发生在您的自定义类具有私有属性时,由于数据网格视图无法查看它们。您将需要在自定义类字段上创建属性并将它们公开,以便当您从自定义类列表设置数据源时,数据对数据网格视图可见并且数据可以流过。

      【讨论】:

        【解决方案7】:

        把这个放在最后:

        datagridview1.Databind();
        

        应该这样做。

        【讨论】:

        • Winforms datagrid 不包含名为 Databind() 的方法。
        猜你喜欢
        • 1970-01-01
        • 2011-07-31
        • 2016-10-12
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多