2014-03-26 28 views
1

我有一個wpf數據網格。我將ObservableCollection分配給它。排序WPF數據網格與整數附加字符串

DG1.DataContext = a; 

其中一列由具有像以下值

1_A_B 
12_A1_B 
3_A2_B 
10_A3_B 
2_A4_B 
15_A5_B 

我想用像如果我的排序使用該柱以下

1_A_B 
2_A4_B 
3_A2_B 
10_A3_B 
12_A1_B 
15_A5_B 

所述第一整數值來排序所述數據網格,它是像下面的字符串升序(這不是我想要的)

1_A_B 
10_A3_B 
12_A1_B 
15_A5_B 
2_A4_B 
3_A2_B 

我想使用所述第一整數值以上列

+0

你'AutoGenerateColumns'?你可以添加另一列來查看將給你的值的第一部分作爲int的行的模型? – dkozl

+0

我使用AutoGenerateColumns = false。我不想添加一個新的列datagrid或ObservableCollection 。 – senthilraja

回答

3

1_A_B12_A1_B等將載綁定到該列中的屬性內進行排序。我們稱之爲PropertyA

可能最簡單的方法是讓數據對象具有其他屬性,我們稱之爲YourSortOrder。當PropertyA上的設置器被非空值調用時,可以使用簡單的字符串操作和int.Parse()一起提取數值並將其分配給YourSortOrder

此代碼是不是生產質量,而且說明了這一點:

public string PropertyA 
{ 
    get { ... } 
    set 
    { 
     _propertyA = value; 
     if (value != null) 
      YourSortOrder = int.Parse(value.Substring(0, value.IndexOf("_", StringComparison.InvariantCultureIgnoreCase))); 
    } 
} 

然後設置您的DataGridColumn的SortMemberPath的財產YourSortOrder

<DataGridColumn x:Name="xxxxx" 
       SortMemberPath="YourSortOrder" 
       ...etc... 
+0

我想到了這個想法。我懷疑的問題是性能。 datagrid中有6列有大量數據。數據網格中有十萬個記錄。加載數據網格所用的時間已經很長了。如果我們添加另一個int屬性,那會降低性能。如果我錯了,請糾正我的錯誤 – senthilraja

+0

@senthilraja這個特殊的屬性不會以任何可感知的方式減緩網格,但是每次你需要設置這個屬性的時候你都會受到很小的打擊。如果您可以對數據進行一定程度的規範化處理,並在數據庫中預先計算出該int值,您將獲得最佳性能。 – slugster

+0

@senthilraja此外,請確保您使用的虛擬化已開啓的網格(因此UI元素僅針對可見內容以及視口外部的內容生成)。你應該能夠將字面上的數百萬條記錄綁定到一個網格 - 但是可能有些事情需要注意,比如綁定錯誤,大量使用轉換器,過寬的數據行等。 – slugster