问个DataGridView排序的问题 如果我有一列是数字,int或者float,现在想点击列头的时候自动排序应该怎么做.因为我发现自动排序是按字符串的方式来的,比如我有三行,每行是:90.1,80.2,9.3那么降序排列将会是:90.1,9.3,80.2而不是我想要的90.1,80.2,9.3请问该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 处理sortcompare事件, 根据e.Column知道你要排序的是哪个列,如果是字符串列就按字符串排序,若为数字列,则按数字排序 怎么才能按数字排序呢?难道我排完还要遍历一遍,再把值都写进datagridview里面? 处理ColumnHeaderMouseClick事件,根据e.ColumnIndex,对绑定的数据源进行排序。 可以用以下条件实现字符串排序Order by CInt(Left(str,Instr(str,'.')-1)), CInt(Right(str,Len(str)-Instr(str,'.'))) 补充下:刚是升序,其中str即为你要排序的字段名称Order by CInt(Left(字段名称,Instr(str,'.')-1)) Desc, CInt(Right(字段名称,Len(str)-Instr(字段名称,'.'))) Desc 忘了说了,我的数据不是来自于数据库是用string[] row = new string[this.dataGridView.Columns.Count];row = {"","",""}this.dataGridView.Rows.add(row)的方式添加的,因为数据全在文本文件上 自己添加的也可以先导入自己建的临时datatable,然后查询排序 把文本文件读到DataTable,再绑定到DataGridView吧,这样操作起来方便。 ........大家都建议datatable啊,那我试试吧 DataGridView的column有个DataType的属性,如果这个type是float或者int,排序的时候会按数字的方式来吗? 先把资料放进一个DataTable里面去,然后利用DataTable的DefaultView进行自己想要的排序例子: DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(decimal)); dt.Rows.Add(new object[] { 90.1 }); dt.Rows.Add(new object[] { 82.3 }); dt.Rows.Add(new object[] { 10.5 }); dt.Rows.Add(new object[] { 6.5 }); DataView dv = dt.DefaultView; //dv.Sort = "ID desc"; dv.Sort = "ID ASC"; for (int i = 0; i < dv.Count; i++) { Response.Write(dv[i]["ID"].ToString() + "<BR>"); }处理完之后,在绑定给Grid就可以达到楼主的目的了 按照大家说的试了一下,还是失败,不知道错在哪for (int i = 0; i < defaultColumn.Length; i++) { FieldInfo fi = an.GetType().GetField(defaultColumn[i].Trim()); if (fi != null) { if ((string)fi.GetValue(an) == "MROM") { dt.Columns.Add((String)fi.GetValue(an), typeof(decimal)); } else { dt.Columns.Add((String)fi.GetValue(an), typeof(string)); } } }上面是datatble添加行,其中mrom那一列是decimal的DataView dv = dt.DefaultView; dv.Sort = "mrom desc"; this.dataGridViewX1.DataSource = dt;这个设置mrom的倒叙排列object[] row = new object[this.dataGridViewX1.Columns.Count];for (int i = 0; i < row.Length; i++) { FieldInfo fi = tmp.GetType().GetField(Tools.defaultColumn[i].Trim()); if (fi != null && Tools.defaultColumn[i].Trim() != "MROM") { row[i] = fi.GetValue(tmp).ToString(); } else { row[i] = Convert.ToDecimal(fi.GetValue(tmp)); } } dt.Rows.Add(row);这个是赋值最后排序结果还是按照字符的方式来的90过了就是9,不是80,我晕晕晕 C# 窗体全屏,各个控件如何相对应的全屏化,如何设计?? Group By 问题。 非常奇怪的事,程序无法响应方向键!!! 能否保存html的部分内容到数据库?如何实现? 有没有办法在单元调试时发生异常会停下来 请帮我建立对象并得到值. 在线等. 事件委托的参数传递问题 怎样将DateTimePicker绑定于DataGrid里面啊??? win7x64平台下,OleDb没有64版本,access怎么连 各位大大,如何vs写dll 怎么统计分页后的datagrid 里的所有记录? 水晶报表如何使用他的[树型菜单]
Order by CInt(Left(str,Instr(str,'.')-1)), CInt(Right(str,Len(str)-Instr(str,'.')))
刚是升序,其中str即为你要排序的字段名称
Order by CInt(Left(字段名称,Instr(str,'.')-1)) Desc, CInt(Right(字段名称,Len(str)-Instr(字段名称,'.'))) Desc
是用
string[] row = new string[this.dataGridView.Columns.Count];
row = {"","",""}
this.dataGridView.Rows.add(row)
的方式添加的,因为数据全在文本文件上
大家都建议datatable啊,那我试试吧
然后利用DataTable的DefaultView进行自己想要的排序
例子:
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(decimal));
dt.Rows.Add(new object[] { 90.1 });
dt.Rows.Add(new object[] { 82.3 });
dt.Rows.Add(new object[] { 10.5 });
dt.Rows.Add(new object[] { 6.5 }); DataView dv = dt.DefaultView;
//dv.Sort = "ID desc";
dv.Sort = "ID ASC"; for (int i = 0; i < dv.Count; i++)
{
Response.Write(dv[i]["ID"].ToString() + "<BR>");
}处理完之后,在绑定给Grid就可以达到楼主的目的了
for (int i = 0; i < defaultColumn.Length; i++)
{
FieldInfo fi = an.GetType().GetField(defaultColumn[i].Trim());
if (fi != null)
{
if ((string)fi.GetValue(an) == "MROM")
{
dt.Columns.Add((String)fi.GetValue(an), typeof(decimal));
}
else
{
dt.Columns.Add((String)fi.GetValue(an), typeof(string));
}
}
}
上面是datatble添加行,其中mrom那一列是decimal的
DataView dv = dt.DefaultView;
dv.Sort = "mrom desc";
this.dataGridViewX1.DataSource = dt;这个设置mrom的倒叙排列object[] row = new object[this.dataGridViewX1.Columns.Count];for (int i = 0; i < row.Length; i++)
{
FieldInfo fi = tmp.GetType().GetField(Tools.defaultColumn[i].Trim());
if (fi != null && Tools.defaultColumn[i].Trim() != "MROM")
{
row[i] = fi.GetValue(tmp).ToString();
}
else
{
row[i] = Convert.ToDecimal(fi.GetValue(tmp));
}
}
dt.Rows.Add(row);
这个是赋值最后排序结果还是按照字符的方式来的
90过了就是9,不是80,我晕晕晕