C# Datagrid(不是datagridview):如何对数字列进行排序,因为所有值都存储为文本

本文关键字:因为 排序 文本 存储 datagridview 不是 Datagrid 数字 | 更新日期: 2023-09-27 18:34:05

我对C#相当陌生。 我有一个数据网格对象。 第一列当然是名称列作为文本;所有其他列(在标题行下方(都是数字。 当我单击其中一个列标题对该列进行排序时,我看到这是将数字作为字符串排序,因为它们是以这种方式存储的。 如何让排序改为按数值排序? 我需要编写自己的排序例程吗?我需要转换器吗? 如果是这样,谁能给我举一个例子来说明如何做到这一点?

以下是我如何将数据添加到我的数据网格:

rows = dbm.getDataForRow(tableview, supid, true);
DataGridTextColumn c1 = new DataGridTextColumn();
TextBlock tbHeader = new TextBlock();
if (suplier == "All")
    tbHeader.Text = "Suplier ";
else
    tbHeader.Text = "Date";
tbHeader.LayoutTransform = new RotateTransform(-90);
tbHeader.VerticalAlignment = System.Windows.VerticalAlignment.Center;
c1.Header = tbHeader;
c1.Binding = new Binding("rowdata[0]");
dg.Columns.Add(c1);
string cellvalue = null;
for (int i = 1; i < columnnames.Count + 1; i++)
{
   tbHeader = new TextBlock();
   c1 = new DataGridTextColumn();
   tbHeader.Text = columnnames[i - 1];
   tbHeader.LayoutTransform = new RotateTransform(-90);
   tbHeader.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
   c1.Header = tbHeader;
   c1.Binding = new Binding("rowdata[" + i + "]");
   // or should I just add the data like c1.Columns.Add(rowdata[i]);
   dg.Columns.Add(c1);
}
dg.ItemsSource = rows;

C# Datagrid(不是datagridview):如何对数字列进行排序,因为所有值都存储为文本

将属性用作 Int 类型,而不是字符串对象。您可以使用ValueConverter来像现在一样显示它。

如果您从dataTable获取数据,则可以确保它是INT类型。

    DataTable dataTable = new DataTable("myData");
    dataTable.Columns.Add("numericData", typeof(int)); // this will make sure datagrid is sorting as numeric
    dataTable.Columns.Add("stringData", typeof(String));
    dataTable.Columns.Add("anotherNumericData", typeof(decimal));
    // rest of your code...
    datagrid1.ItemsSource = dataTable.DefaultView;

另一种方法:

提高Microsoft数据网格 CTP 排序性能