簡體   English   中英

DataGridView自定義排序不在DataMember上(數據綁定網格)

[英]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>繼承,並重寫ApplySortCoreRemoveSortCoreSupportsSortingCoreIsSortedCoreSortPropertyCoreSortDirectionCoreIsSortedCore !)。 特別是, ApplySortCore將必須檢測特定的PropertyDescriptor ,並執行定制搜索。

我並不是說這很簡單(相反),但是可以在標准綁定機制中完成。

另一種想法可能是將id設置為其他名稱,實際上不是int而是自定義類/結構。 它需要實現IComparable / IComparable<T> ,並具有顯示所需文本的ToString() 然后,您大概可以(未經測試)直接綁定到該列。

然而!!! 如果您還不熟悉System.ComponentModel ,那么建議您避免這種復雜性。 如果上述說法合理,那就很好-如果不是,我不確定我是否會在您第一次刺入該區域時嘗試...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM