C# winform 中datagridview ,如何实现点击列头,对应的列自动排序?

 我来答
有缘无份1967duh
高粉答主

推荐于2019-10-31 · 说的都是干货,快来关注
知道大有可为答主
回答量:226
采纳率:100%
帮助的人:3.9万
展开全部

在使用 DataGridView时,对于数值列,默认的排序方式仍然是按照字符串方式进行

如果需要按照数值型进行排序,有几种办法,其中一种就是重载SortCompare方法

//重载_SortCompare方法

private void DataGridView1_SortCompare(object sender,DataGridViewSortCompareEventArgs e)

{

//   如果是学号或成绩列,则按浮点数处理

if(e.Column.Name=="学号"|| e.Column.Name=="成绩")

{

e.SortResult = (Convert.ToDouble(e.CellValue1) - Convert.ToDouble(e.CellValue2) > 0) ? 1 : (Convert.ToDouble(e.CellValue1) - Convert.ToDouble(e.CellValue2) < 0)?-1:0;

}

//否则,按字符串比较

else

{

e.SortResult = System.String.Compare(Convert.ToString(e.CellValue1), Convert.ToString(e.CellValue2));

}

// 如果发现两行相同,则按学号排序  

if (e.SortResult == 0 && e.Column.Name != "学号")

{

e.SortResult = Convert.ToInt32(DataGridView1.Rows[e.RowIndex1].Cells["学号"].Value.ToString()) -

Convert.ToInt32(DataGridView1.Rows[e.RowIndex2].Cells["学号"].Value.ToString());

}
e.Handled = true;//不能省掉,不然没效果
}  

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式