[英]DataGridView custom sort not on DataMember (Databound Grid)
我有一個自定義DataGridView列,該列使用嵌入式控件,該控件會彈出一個搜索窗口以查詢該列的值。 重要的是數據綁定列是數字ID,但自定義列單元格顯示文本描述。
如何獲得按文本說明而不是數字ID排序的列?
我看不到一種方法來覆蓋列以按FormattedValue而不是Value進行排序。 我可以確保說明在數據表中顯示為單獨的列,但是我看不到有任何說法“將VALUE_ID列用作DataMember,但將VALUE_DESCRIPITON列用作'SortMember'”
您可以使用以下文章“ 列排序模式”中描述的技術
private bool ascending;
private int sortColumn;
private void dgv_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
List<SomeObject> list = (List<SomeObject>)someBindingSource.DataSource;
if (e.ColumnIndex != sortColumn) ascending = false;
int 1 = e.ColumnIndex;
if (i == DescriptionColumn.Index)
list.Sort(new Comparison<SomeObject>((x,y) => x.ID.CompareTo(y.ID)));
sortColumn = e.ColumnIndex;
ascending = !ascending;
if (!ascending) list.Reverse():
someBindingSource.ResetBindings(false);
// you may also have to call dgv.Invalidate();
}
您使用什么作為數據源? DataTable
? 排序最通常由列表本身提供,因此您實際上可以使用自己的特定排序行為編寫自定義列表。 最簡單的方法(盡管仍然很簡單)是從BindingList<T>
繼承,並重寫ApplySortCore
, RemoveSortCore
, SupportsSortingCore
, IsSortedCore
, SortPropertyCore
和SortDirectionCore
( IsSortedCore
!)。 特別是, ApplySortCore
將必須檢測特定的PropertyDescriptor
,並執行定制搜索。
我並不是說這很簡單(相反),但是可以在標准綁定機制中完成。
另一種想法可能是將id設置為其他名稱,實際上不是int而是自定義類/結構。 它需要實現IComparable
/ IComparable<T>
,並具有顯示所需文本的ToString()
。 然后,您大概可以(未經測試)直接綁定到該列。
然而!!! 如果您還不熟悉System.ComponentModel
,那么建議您避免這種復雜性。 如果上述說法合理,那就很好-如果不是,我不確定我是否會在您第一次刺入該區域時嘗試...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.