Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Datagrid(不是datagridview):由于所有值都存储为文本,如何对数字列进行排序?_C#_Wpf_Sorting_Datagrid - Fatal编程技术网

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

C#Datagrid(不是datagridview):由于所有值都存储为文本,如何对数字列进行排序?,c#,wpf,sorting,datagrid,C#,Wpf,Sorting,Datagrid,我对C#还相当陌生。我有一个datagrid对象。第一列当然是作为文本的名称列;所有其他列(标题行下方)都是数字。当我单击其中一个列标题对该列进行排序时,我看到这是将数字作为字符串进行排序,因为它们是以这种方式存储的。如何将排序改为按数值排序?我是否需要编写自己的排序例程?我需要一个转换器吗?如果是这样的话,有人能给我举个例子说明这是如何做到的吗 以下是我如何将数据添加到我的DataGrid: rows = dbm.getDataForRow(tableview, supid, true); D

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

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

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;
rows=dbm.getDataForRow(tableview,supid,true);
DataGridTextColumn c1=新DataGridTextColumn();
TextBlock tbHeader=新的TextBlock();
如果(供应商==“所有”)
tbHeader.Text=“Suplier”;
其他的
tbHeader.Text=“日期”;
tbHeader.LayoutTransform=新的旋转变换(-90);
tbHeader.VerticalAlignment=System.Windows.VerticalAlignment.Center;
c1.标题=tbHeader;
c1.绑定=新绑定(“rowdata[0]”;
dg.列。添加(c1);
字符串cellvalue=null;
对于(int i=1;i
将属性用作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;
另一种方法:


将字符串转换为数字。