好象datagrid里有个什么sort属性,可以根据这个属性得到当肖排序状态,是什么我忘了,以前碰到过。
帮你UP一下。
帮你UP一下。
解决方案 »
- 无法实现DetailsView中的DropDownList在插入记录时无法绑定
- 帮忙看个错误原因
- 怎么在webBrowser里点击一个文本框,一个普通的按钮,一个A标签
- 怎样让一个Form窗体显示在如Panel控件之上?
- C#用sql开发的软件,安装到客户机器后,为防止客户用sql的查询、管理器来更改sql数据表的数据,如何安装sql2000时不安装查询、管理器,只有服务器呢?
- C# 操作Ini文件
- C# 我做了一个项目,后来项目要把上面的几个按钮做成多按钮控件形式,求帮助!!!在线等
- const 和readonly的区别。。
- 一个DataGrid的问题,望高手指点
- 报表查询引擎问题
- 怎样将文件存在客户端?
- 在这儿多问几个问题:都是用C#写Asp.net的问题. 1.在C#中关闭IE窗口和刷新窗口2.DataGrid中的链接列传递两个变量;等等..
比较麻烦一点,你可以在datagrid_mouseDown事件中判断是哪一个columnhearder,因为第一次是空的,点一次,就变成升序,再点一次变成
降序,然后就升序-》降序-》升序-》降序所以定义一个变量就知排序状态
如果你不设置sort属性,而只是单击datagrid的header,dataset.tables[0].defaultview.sort只会返回空
假设有DataGrid---dataGrid1
private DataGrid dataGrid1;
private DataSet ds;
private ColumnIndex=-1;
private ColumnIndex0=-1;
思路是使用ColumnIndex来记录最后一个被点击的列头,然后通过该列的第一行和第二行比较(如果相同就与第三行比较)来确定升序或是降序。//记录鼠标按下时的Column
private void dataGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
DataGrid.HitTestInfo hti=this.dataGrid1.HitTest(e.X,e.Y);
if (hti.Type==DataGrid.HitTestType.ColumnHeader)
ColumnIndex0=hti.Column;
else
ColumnIndex0=-1;
}
//记录鼠标抬下时的Column,并与按下时的比较
private void dataGrid1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (ColumnIndex0!=-1)
{
DataGrid.HitTestInfo hti=this.dataGrid1.HitTest(e.X,e.Y);
if (hti.Type==DataGrid.HitTestType.ColumnHeader)
{
if (ColumnIndex0==hti.Column)
ColumnIndex=hti.Column;
}
}
}
//取得排序
private void GetSort()
{
CurrencyManager cm=(CurrencyManager)this.dataGrid1.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.DataMember];
object o=((DataRowView)cm.List[0]).Row[ColumnIndex];
for (int i=0;i<cm.Count;i++)
{
if (((DataRowView)cm.List[i]).Row[ColumnIndex]!=o)
{
if (((DataRowView)cm.List[i]).Row[ColumnIndex].ToString().CompareTo(o.ToString())>=0)
MessageBox.Show("以"+ds.Tables[0].Columns[ColumnIndex].ColumnName+"升序排列");
else
MessageBox.Show("以"+ds.Tables[0].Columns[ColumnIndex].ColumnName+"降序排列");
return;
}
}
}