【问题标题】:Use datagridview columns added from the designer on data table在数据表上使用从设计器添加的 datagridview 列
【发布时间】:2020-08-14 09:26:54
【问题描述】:

我在设计器视图中创建了一个 datagridview 并向其中添加了列。我的问题是如何从我的 DataTable 对象访问这些列,而不是再次手动将列添加到 Datatable 中(重新使用从 Datatable 上的 datagridview 添加的列)。这就是到目前为止所做的事情

void loadData()
        {

            dt = new DataTable();
          

            dt.Rows.Add(new object[] { "Argentina", 2000 });
            dt.Rows.Add(new object[] { "Belgium", 4500 });
   

            dataGridView1.DataSource = dt;
            }

这是我在 datagrid 中的列

我需要使用 BindingSource 类来过滤数据,但我不知道我还能如何做到这一点,以便我从设计器中添加列并且能够过滤数据网格。 this 是我之前发布的帖子以获得有关如何过滤 datagridview 的帮助,但解决方案似乎必须使用数据源绑定数据。我需要维护设计器上应用于 datagridview 列的样式和格式

【问题讨论】:

  • 您可以创建过滤后的数据表,然后将过滤后的表设为您的数据源:DataTable dt2 = dt.AsEnumerable().Where(x => your filter).CopyToDataTable();
  • @jdweng 那么我如何从 datagridview 设计器维护我的自定义列
  • 那么如果你有第二个表 dt2 使用:foreach(DataRow row in dt2.AsEnumerable()) { dt.Rows.Add(new object[] { row[0], row[1]} ); }
  • @jdweng 我如何从 DataTable 访问 datagridview 列,这是没有得到的
  • 视图可能没有重新绘制。诀窍是将数据源设置为空。 dataGridView1.DataSource = null; dataGridView1.DataSource = dt2;

标签: c# datagridview


【解决方案1】:

由于您是手动添加数据,因此将它们添加到数据表然后将其设置为数据源是没有用的,您可以;

void loadData(){
    dataGridView1.Rows.Add(new object[] { "Argentina", 2000 });
    dataGridView1.Rows.Add(new object[] { "Belgium", 4500 });
}

也就是说,Object 数组的顺序必须与 datagridview 中列的顺序相匹配。

关于您关于过滤的问题,问题是您没有提供数据的实际来源,通常您希望在检索数据时对其进行过滤。如果数据是手动添加的,那么您可以循环遍历 datagridview 并检查您的过滤器,尽管这样实际上并没有使用 datagridview 的数据绑定功能。

【讨论】:

  • 缺少的在datable上重用datagridview列的代码在哪里?
  • 我从你的问题中得到的是,你不想要 dt.Columns.Add() 的代码行,但它不可能是因为它与你手动添加的来自 dt.Rows.Add() 的数据不匹配
  • 所以我不能在数据表上使用 datagridview 列?
  • 在你的情况下,因为你手动填充数据表,你不能。
  • 想一想,你的datagridview是一个显示数据的控件,它确实有列但是在你的数据表中,没有设置列,“阿根廷”去哪里,“2000”去哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多