【问题标题】:C# Updating DataGridView with List and checkboxC# 使用列表和复选框更新 DataGridView
【发布时间】:2017-10-16 12:04:22
【问题描述】:

我有一个 C# 程序向 REST API 发出 http 请求并将数据保存到列表中。

我只是使用DataGridView.DataSource 每 5 秒填充一次 DataGridView。

private void timerStatusManager_Tick(object sender, EventArgs e)
    {
      ControllerListImpressions.AddItemPrinterList();

      PrinterList = ControllerListImpressions.PrinterList;
     // dataGrid.DataSource = null;
      dataGrid.DataSource = PrinterList.Impressions;

      timerStatusManager.Start();
    }

AddItemPrinterList 方法只是在请求有新项目时更新列表。

PrinterList.Impressions 是此处定义的列表:

public List<Impression> Impressions = new List<Impression>();

我的问题是 dataGrid 在列表有一个新项目时永远不会更新。当我将DataSource 设置为null 时,它会正确更新,但我在DataGridView 有一个CheckBox。当 DataGridView 以这种方式更新时,此 CheckBox 总是变为 false。

【问题讨论】:

  • 使用BindingList&lt;Impression&gt;代替List&lt;Impression&gt;
  • 即使使用这种和平的代码,它也不起作用。 var actualList = PrinterList.Impressions;var listBinding = new BindingList&lt;Impression&gt;(actualList);
  • 没有一个最小的、可验证的例子,我不知道出了什么问题,但它可以工作,看看这个演示:github.com/crowcoder/BindingListDemo

标签: c# datagridview datagridviewcheckboxcell


【解决方案1】:

只需将 DataSource 绑定到您的 GridView,然后调用:

dataGrid.Refresh()每次你希望它被刷新,否则会更新数据源但不会更新网格

【讨论】:

  • 它不起作用。我知道 DataSource 正在更新,但遗憾的是 GridView 没有。
  • 尝试调用 dataGrid.Refresh()dataGrid.Update() 否则,而不是 .Refresh,再次设置绑定 ->dataGrid.DataSource = PrinterList.Impressions;
  • 其实这个绑定代码是在一个定时器里面,所以它应该每5秒更新一次GridView。它只是在我在更新前将 DataSource 设置为 null 时更新。在这种情况下,问题是我的复选框也设置为 false,但它应该保持其值。
  • 你可以尝试使用 BindingList 代替 List 吗?
  • 我已经尝试过使用BindingList,但它也不起作用。
猜你喜欢
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多