我想在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大小。
我希望有任何建议,以优化当前的代码。
答案 0 :(得分:0)
我认为在开始将新数据源绑定到列之前,必须捕获列的大小。
在绑定之前使用类似的东西
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++;
}