2012-07-09 187 views
0

我知道這個主題有好幾個線程,但我已經嘗試了一切,仍然沒有運氣過濾我的datagridview。我試圖根據用戶在文本字段中輸入的值來過濾datagridview的行。 datagridviews數據源在下面提供的數據源中設置。DataGridView過濾器不工作

所以這裏是我使用的代碼。我沒有得到任何錯誤,datagridview根本不會改變。 ManufacturerService.GettAll返回製造商的名單,我將其轉換爲一個的BindingList到

bsManufacturers.DataSource = new BindingList<Manufacturer>(ManufacturerService.GetAll(_ctx));

在此代碼運行文本框的TextChanged事件。我已經檢查過斷點等。該代碼在執行過濾器字符串正確時執行。

private void FilterData(string str) 
{ 
    bsManufacturers.Filter = string.Format("Name like '%{0}%'", str); 
    dgvManufacturers.Refresh(); 
} 

任何幫助?或至少解釋爲什麼這不起作用?我一直在做這個了好幾個小時,只是不能似乎找到一個anwser任何地方

回答

0

我用這個項目解決了這個問題: http://blw.sourceforge.net/

我個人認爲應該有這樣做的更好的方式,但它的工作,現在我猜,我將不得不很樂意與「足夠好」目前。

這裏是工作代碼。無論如何,重要的部分。

private void PopulateDataGridView() 
{ 
    blvManufacturers = new BindingListView<Manufacturer>(ManufacturerService.GetAll(_ctx)); 
    _bsManufacturers = new BindingSource { DataSource = _blvManufacturers}; 
    dgvManufacturers.DataSource = _bsManufacturers;   
} 

private void FilterData(string str) 
{ 
    // Change the filter of the view. 
     blvManufacturers.ApplyFilter(
     delegate(Manufacturer manu) 
     { 
      // uses ToLower() to ignore case of text. 
      return manu.Name.ToLower().Contains(str.ToLower()); 
     } 
    );   
} 
0

存在對數據網格視圖中創建過濾器庫:

DataGridView Filter Popup

問候

+0

嘗試此操作,並將dgv數據源設置爲null,然後將其設置爲bindingsource。雖然我打破並檢查綁定源的屬性的過濾器屬性設置正確,但仍然datagridview不過濾 – limlim 2012-07-09 07:02:19

+0

好吧,所以我發現道具SupportsFiltering = false。 http://msdn.microsoft。com/en-us/library/system.windows.forms.bindingsource.supportsfiltering.aspx我仍然不明白爲什麼。應該BindingList沒有實現這個接口? – limlim 2012-07-09 07:53:06

+0

試試我更新後的帖子。 – BizApps 2012-07-09 07:54:39

0

我不要以爲你需要爲此使用綁定列表,你最好使用DataTable作爲「綁定源」的數據源。

然後,你可以使用下面你篩選數據方法: -

DataTable.DefaultView.RowFilter = string.format("Name like '%{0}%'", str); 

你會設置它是這樣的: -

Binding Source.Datasource = DataTable, 
DatagridView.Datasource = Binding Source; 

如果你這樣做,你甚至不會需要刷新你datatgrid,它會自動做到這一點。

希望這會有所幫助。

+0

我還沒有嘗試過。這我將不得不編寫代碼先將我的綁定列表或通用列表轉換爲DataTable。 – limlim 2012-07-09 09:46:54

+0

ManufacturerService.GetAll(_ctx)實際上做了什麼? – Derek 2012-07-09 10:52:33

1

數據排序信息包含在網格標題中。用戶可以在一個或多個標題中設置單個或多個排序。在規劃層面,排序看上去如下

//Get top-level header 
Header header = grid.Headers[0]; 

header["Product"].SortDirection = SortDirection.Ascending; 
header["Price"].SortDirection = SortDirection.Descending; 

設置Column.Sortable屬性設置爲false足以使軟件只能從通過UI dapfor在修改排序阻止用戶。 com