刷新DataGridView内容

本文关键字:内容 DataGridView 刷新 | 更新日期: 2023-09-27 18:12:43

我想在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大小。

我将感谢任何建议,以优化当前的代码。

刷新DataGridView内容

我认为在开始将新数据源绑定到列之前,必须捕获列的大小。

在绑定 之前使用类似的代码
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++;
}