刷新DataGridView内容

问题描述:

我想在C#Winform中刷新DataGridView的内容并保持其外观。刷新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尺寸。

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

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

与之前像这样绑定

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++; 
} 
+0

后似乎DataColumn类没有Width属性,也不包含任何用户界面相关的属性。相反,它需要通过dataGridView1.Columns [index]直接访问它。 – 2013-05-07 17:00:27

+0

尝试更新 – 2013-05-07 17:02:24

+0

尝试将var替换为可访问Width属性的DataGridViewColumn。很棒。 – 2013-05-07 17:10:51