datagridview手动填充的列值最初未显示

时间:2013-11-21 14:44:11

标签: c# winforms datagridview datagridviewcolumn

我在tabcontrol中有一个包含多个datagridviews的应用程序。 其中一个tabcontrols有4列由数据源填充。 我不使用autogenerate列,而是使用DataPropertyName将值绑定到列。

我创建了2列,在分配DataSource后手动填充。

此datagridview中的值是来自应用程序中其他位置的datagridview的过滤值。

当我过滤时,然后转到包含datagridview的选项卡,手动列为空。 更改过滤器(但不是结果)会填充这些列。

如何获取手动填充的列以始终显示其值?

在datagridview上调用Refresh()或Update()并不能解决我的问题

我的代码的简短版本: 我实际上使用的是继承自DataGridView

的类
//fill datagridview
PcbLink[] links = Service.Instance.Client.queryPcbLinks();

List<Pcb> pcbs = new List<Pcb>();

foreach (PcbLink link in links)
{
  PcbFilter pcbfilter = new PcbFilter();
  pcbfilter.pcb_id = link.pcb_id;
  Pcb[] res = Service.Instance.Client.queryPcbs(pcbfilter);
  pcbs.Add(res[0]);//only first element because pcb_id should always be unique -> only one row
}
cdgvUsage.SetData(pcbs);//setData is used as cdgvUsage.DataSource = pcbs, but does some stuff internally
for (int i = 0; i < links.Length; i++)
{
  SortableBindingList<Pcb> dataSource = cdgvUsage.GetData<Pcb>();
  cdgvUsage["count", i].Value = links[i].count;
  char variantchar = (char)('a' + (char)(dataSource[0].variant));
  cdgvUsage.Columns["variant"].ValueType = typeof(string);
  cdgvUsage["variant", i].Value = variantchar.ToString();
}

1 个答案:

答案 0 :(得分:0)

我相信在将DataSource指向dataGridView后,更改必须保存在数据源中,否则它们不会反映在dataGridView中(因为每次执行Refresh()或Update()时它都会从数据源中获取数据。)

确保手动填充的值存储在dataSource中。