如何在DataGridView中将字符串排序为数字

我在datagridview中有特定数字的字符串列。 它没有约束力。 我想正确排序。 默认DataGridView排序不会对其进行排序。

示例:Dgv对此进行排序:

- FS 752/08/2014 - FS 752/06/2015 - FS 751/12/2013 - FS 751/08/2014 - FS 751/06/2015 

它应该是这样的:

  - FS 752/06/2015 - FS 751/06/2015 - FS 752/08/2014 - FS 751/08/2014 - FS 751/12/2013 

我怎样才能做到这一点?

如您所说,您没有使用DataSource那么您可以尝试使用SortCompare事件 。

当用户单击列以更改排序顺序时,或者以编程方式调用Sort函数时,将调用此事件。

这是一个基本的例子。 我假设您要排序为年(?)然后是月(?)然后是第一个数字:

 private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { // Check if we are sorting by the special column. if (myDataGridView.Columns.Contains("My_Column") && e.Column == myDataGridView.Columns["My_Column"]) { // Parse the special values (add validation if required). string[] parts1 = e.CellValue1.ToString().Trim().Split('/'); int a1 = int.Parse(parts1[0].Split(' ')[2]); int b1 = int.Parse(parts1[1]); int c1 = int.Parse(parts1[2]); string[] parts2 = e.CellValue2.ToString().Trim().Split('/'); int a2 = int.Parse(parts2[0].Split(' ')[2]); int b2 = int.Parse(parts2[1]); int c2 = int.Parse(parts2[2]); // Compare each value as required. // First compare the last value (year?) e.SortResult = c1.CompareTo(c2); // If equal, then compare second value (month?) if(e.SortResult == 0) e.SortResult = b1.CompareTo(b2); // Finally if still equal, then compare first value if(e.SortResult == 0) e.SortResult = a1.CompareTo(a2); } } 

注意 :如果您无法确保每个单元格中始终具有有效格式,则需要为此事件添加validation逻辑。 例如,使用int.TryParse()并检查null值,并validationstring拆分的长度。