【问题标题】:The recreated columns in a DataGridViewDataGridView 中重新创建的列
【发布时间】:2012-06-15 16:22:01
【问题描述】:

我有一个 Windows 窗体中的 DataGridView。我为这个 DataGridView dgv 定义了 5 列。

存储过程返回的数据表绑定了这个DataGridView。

         DataTable table1 = returned by a stored procedure in C#;
         dgv.DataSource = table1;
         dgv.AutoGenerateColumns = false;
         dgv = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; 

然后在另一个按钮事件中。我想重新绑定DataGridView一个数据源。

      DataTable dt1 = new DataTable();

然后

 DataRow dr = dt1.NewRow();
            dr["Interval"] = txtBox1.Text;
            dr["Count"] = txtBox2.Text;
            dr["AgeBegin"] = txtBox3.Text;
            dr["AgeEnd"] = txtBox4.Text;
            dr["Gender"] = txtBox5.Text;
            dt1.Rows.Add(dr);
            dgv.DataSource = dt1;

dt1 只有一行。现在 dgv 显示 10 列。前 5 列为空,后 5 列为真实数据。

为什么?谢谢。

【问题讨论】:

  • 这些列的标题是什么?它们与您的标题匹配吗?
  • 尝试设置 DataPropertyName
  • @K'Leg,列相同,但标题略有不同。
  • "dgv = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;"此行无法编译。
  • 我已经对此进行了测试,并且完全按照您正在做的事情做我无法复制问题,我什至删除了自动生成列,但我仍然只得到 5 个。您是否在 datagridview 中预定义了列?我建议将其留空以开始并允许自动生成列,至少在您找出缺陷之前

标签: c# winforms datagridview


【解决方案1】:

您需要将AutoGenerateColumns 设置为false 将其分配给DataSource

DataTable table1 = returned by a stored procedure in C#;
dgv.AutoGenerateColumns = false; // Before assigning the DataSource
dgv.DataSource = table1;
...

【讨论】:

  • 这是有道理的,但是当他更改数据源时,问题就出现了
【解决方案2】:

如果没有放置数据的位置,Datagridviews 会自动在您身上添加行。除非您告诉它不要这样做,否则设计器无法选择。

dgv.AutoGenerateColumns=false;

没关系,你已经有了这个。

您不应该这样做,但您是否尝试在重新绑定之前清除 dgv,只是为了找出问题?

您是否在 datagridview 中预定义了列?我建议将其留空以开始并允许自动生成列,至少在您找出缺陷之前

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2011-02-20
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多