2013-08-21 28 views
1

我有自定義的DataGridView控件,並且在那個控件中有RefreshGrid()方法,它通過使用DataSource填充DataGridView。現在我試圖在DataSource綁定後從DataGridView刪除幾列,但無法刪除這些列,那些列沒有被刪除,但在DataGridView的末尾添加,當我再次調用RefreshGrid()方法時,那些列將從DataGridView中刪除。下面是方法RefreshGrid()代碼爲什麼DataGridColumn沒有從DataGridView中刪除

public void RefreshGrid() 
    { 
     DataTable _table = AccessConnectionManagers.GetDataTableBySQLQuery("select Colm1,Colm2,Colm3 from TableName"); 
     //Data Source Binding with DataGridView 
     this.DataSource = _table; 

     if (!string.IsNullOrEmpty("Colm1")) 
     { 
      var _colmArray = GridRemoveColumnName.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries).Where(a => this.Columns.Contains(a)).Select(a => a).ToArray(); 

      foreach (string colm in _colmArray) 
      { 
       //Remove column after Source Binding 
       this.Columns.Remove(colm); 
      } 
     } 
    } 

徵集RefreshGrid()

public Form1() 
    { 
     InitializeComponent(); 
     myDataGridView1.RefreshGrid(); 
    } 

請找出錯誤,並建議我的解決方案。

+0

**現在我打算在DataSource綁定後從DataGridView刪除幾列**請向我們展示在DataSource綁定後刪除這些列的代碼 –

+0

代碼工作正常,您可以始終在綁定後刪除datagridviewcolumns。 –

+0

@MicrosoftDN'this.Columns.Remove(colm);' –

回答

3

我找到答案這個問題

我需要調用RefreshGrid()方法在窗體加載不上表 構造函數,調用它的形式登錄我的問題得到解決之後。但我 不知道爲什麼它不工作窗體構造函數。

我想你嘗試訪問不存在的列。您正在使用DataGridView.AutoGenerateColumns功能,即使您設置了DataSource屬性,DatagridView也不會在顯示網格之前創建列。這就是爲什麼它不能在窗體構造函數中工作,但是在form_Load事件中或者在網格被顯示之後工作。

使用form_Load也許是一種可能的解決方法,但我要求您使用專門用於處理這種情況的DataGridView.DataBindingComplete事件。

0

您應該只從數據表中檢索想要在DataGridView中顯示的列。

var results = _table 
    .AsEnumerable() 
    .Where("Add your condition") 
    .Select("your columns names"); 

this.DataSource = results; 

所以,現在你不需要從DataGridView

+0

這將刪除/篩選出行而不是列? –

+0

@KingKing:從linq中的select語句我們只獲取我們需要的列。 cond可以刪除的地方。如果不需要的話 –

+0

我忽略了'Select',但是如果OP希望他的DataSource是一個'DataTable',這仍然需要'CopyToDataTable'。我想我們必須在這裏使用'匿名類型'來選擇列,所以'CopyToDataTable'不能被使用。 –

0

我找到答案這個問題

我需要調用RefreshGrid()方法在窗體加載不上表格構造刪除任何列,在表單加載後,我的問題得到解決。但我不知道爲什麼它不會在Form構造函數上工作。

相關問題