刷新 DataGridView 内容

Posted

技术标签:

【中文标题】刷新 DataGridView 内容【英文标题】:Refresh DataGridView content 【发布时间】:2013-05-07 16:16:42 【问题描述】:

我想在 C# Winform 中刷新 DataGridView 的内容并保持其视觉外观。

我可以进行刷新的唯一方法是使用这个重新初始化网格的函数:

它更新数据源,清除所有列并使用正确的标题文本恢复所需的列。

private void InitDataGrid()

    allItem = DataRepository.LotProvider.GetByIdProduit(detail.IdProduit)
    dataGridView1.DataSource = allItem;
    dataGridView1.Columns.Clear();
    // Get a dictionary of the required column ID / shown text
    Dictionary<string, string> dictionary = InitDisplayedFields();        
    foreach (KeyValuePair<string, string> column in dictionary)
        // If the grid does not contain the key
        if (!dataGridView1.Columns.Contains(column.Key))
        
            // Add the column (key-value)
            int id = dataGridView1.Columns.Add(column.Key, column.Value);
            // Bind the property
            dataGridView1.Columns[id].DataPropertyName = column.Key;
        

问题是,如果用户将列从 Y 大小拉伸到 X 大小并刷新 DataGridView,该列将回到 Y 大小。

我无法绕过 Clear(),否则网格会在初始化时显示所有数据源列。

我想要的是保持每个拉伸列的 X 大小。

对于优化当前代码的任何建议,我将不胜感激。

【问题讨论】:

【参考方案1】:

我认为您必须先捕获列的大小,然后才能开始将新数据源绑定到它。

在绑定之前使用类似的东西

List<int> widthsList= new List<int>();
foreach (var column in dataGridView1.Columns)

   int ColumnWidth = column.Width;
   widthsList.Add(ColumnWidth);

绑定后的这个

int j=0;
foreach (int wz in widthsList)

   dataGridView1.Columns[j].Width = wz ;
   j++;

【讨论】:

DataColumn 类似乎没有 Width 属性,也不包含任何与 UI 相关的属性。而是需要直接通过dataGridView1.Columns[index]来访问。 尝试将 var 替换为 DataGridViewColumn ,它可以访问 Width 属性。效果很好。

以上是关于刷新 DataGridView 内容的主要内容,如果未能解决你的问题,请参考以下文章

将 DataTable 绑定到已定义列的 Datagridview

DataGridview刷新后报索引异常的问题

如何允许用户在 c# 中的 datagridview 组合框中手动输入

在 DataGridView 中,根据输入的值更改选定的单元格

C#如何将窗口A中对应的datagridview表格选中某行,然后点击确认按钮,将该行数据录

C#怎样把access数据库中的数据刷新一下显示在DataGridView中