DataGridView多列排序实现方法
作者:手机用户2502853373 | 来源:互联网 | 2024-12-17 15:41
本文介绍如何在WindowsForms应用程序中使用C#实现DataGridView的多列排序功能,包括升序和降序排序。
为了在Windows Forms应用程序中实现DataGridView的多列排序,我们可以利用C#中的自定义比较器来处理排序逻辑。以下是具体的实现步骤和代码示例。 ```csharp using System; using System.Collections; using System.Windows.Forms; public class Form1 : Form { private DataGridView dataGridView1 = new DataGridView(); private FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel(); private Button button1 = new Button(); private RadioButton radioButtOnAsc= new RadioButton(); private RadioButton radioButtOnDesc= new RadioButton(); [STAThread] public static void Main() { Application.Run(new Form1()); } public Form1() { AutoSize = true; Text = "DataGridView 多列排序示例"; flowLayoutPanel1.FlowDirection = FlowDirection.TopDown; flowLayoutPanel1.Location = new System.Drawing.Point(300, 0); flowLayoutPanel1.AutoSize = true; flowLayoutPanel1.Controls.Add(radioButtonAsc); flowLayoutPanel1.Controls.Add(radioButtonDesc); flowLayoutPanel1.Controls.Add(button1); button1.Text = "排序"; radioButtonAsc.Text = "升序"; radioButtonDesc.Text = "降序"; radioButtonAsc.Checked = true; Controls.Add(flowLayoutPanel1); Controls.Add(dataGridView1); } protected override void OnLoad(EventArgs e) { PopulateDataGridView(); button1.Click += new EventHandler(Button1_Click); base.OnLoad(e); } private void PopulateDataGridView() { dataGridView1.Size = new Size(300, 300); dataGridView1.ColumnCount = 2; dataGridView1.Columns[0].Name = "FirstName"; dataGridView1.Columns[1].Name = "LastName"; dataGridView1.Columns["FirstName"].HeaderText = "名"; dataGridView1.Columns["LastName"].HeaderText = "姓"; dataGridView1.Columns["FirstName"].SortMode = DataGridViewColumnSortMode.Programmatic; dataGridView1.Columns["LastName"].SortMode = DataGridViewColumnSortMode.Programmatic; dataGridView1.Rows.Add(new string[] { "Peter", "Parker" }); dataGridView1.Rows.Add(new string[] { "James", "Jameson" }); dataGridView1.Rows.Add(new string[] { "May", "Parker" }); dataGridView1.Rows.Add(new string[] { "Mary", "Watson" }); dataGridView1.Rows.Add(new string[] { "Eddie", "Brock" }); } private void Button1_Click(object sender, EventArgs e) { if (radioButtonAsc.Checked) { dataGridView1.Sort(new RowComparer(SortOrder.Ascending)); } else if (radioButtonDesc.Checked) { dataGridView1.Sort(new RowComparer(SortOrder.Descending)); } } private class RowComparer : IComparer { private int sortOrderModifier = 1; public RowComparer(SortOrder sortOrder) { if (sortOrder == SortOrder.Descending) { sortOrderModifier = -1; } else if (sortOrder == SortOrder.Ascending) { sortOrderModifier = 1; } } public int Compare(object x, object y) { DataGridViewRow row1 = (DataGridViewRow)x; DataGridViewRow row2 = (DataGridViewRow)y; int compareResult = String.Compare( row1.Cells[1].Value.ToString(), row2.Cells[1].Value.ToString()); if (compareResult == 0) { compareResult = String.Compare( row1.Cells[0].Value.ToString(), row2.Cells[0].Value.ToString()); } return compareResult * sortOrderModifier; } } } ``` ### 参考资料 - [MSDN: DataGridView.Sort 方法](http://msdn.microsoft.com/en-us/library/ms171607(VS.80).aspx) - [MSDN: 如何:对 Windows 窗体 DataGridView 控件中的数据进行排序](http://msdn.microsoft.com/zh-cn/library/ms171608(VS.80).aspx) - [MSDN: DataGridViewColumnSortMode 枚举](http://msdn.microsoft.com/en-us/library/95scxcdy.aspx) - [CodeProject: DataGridView 的多列排序](http://www.codeproject.com/KB/grid/multicolumn_sort.aspx) - [MSDN 博客: DataGridView 排序技巧](http://blogs.msdn.com/jfoscoding/articles/494012.aspx)
推荐阅读
1.Static静态布局固定宽高:2.Liquid流式布局宽高用百分比,按屏幕分辨率调整,布局不发生变化3.Adaptive自适应 ...
[详细]
蜡笔小新 2024-12-14 10:35:02
本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ...
[详细]
蜡笔小新 2024-12-17 12:34:41
本文探讨了在使用Go语言开发过程中遇到的一些典型问题,包括Map遍历的不确定性、切片操作的潜在风险以及并发处理时的常见错误。通过具体案例分析,提供有效的解决策略。 ...
[详细]
蜡笔小新 2024-12-17 18:19:34
本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ...
[详细]
蜡笔小新 2024-12-17 13:57:01
本文详细介绍了如何使用Java实现将文本转换为图片的功能,包括自动换行、自定义字体加载、抗锯齿优化以及图片压缩等技术细节。 ...
[详细]
蜡笔小新 2024-12-17 13:47:08
这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ...
[详细]
蜡笔小新 2024-12-16 18:23:06
大多数商城应用程序在启动时会显示一个欢迎页面,以提升用户体验。本文将指导您如何实现一个基本的欢迎页,该页面会在用户打开应用后短暂展示,随后自动跳转至主界面。 ...
[详细]
蜡笔小新 2024-12-16 17:34:59
本文介绍了 JavaFX,这是一个用于创建富客户端应用程序的 Java 图形和媒体工具包,并详细说明了如何在 Eclipse 环境中配置和开发 JavaFX 应用。 ...
[详细]
蜡笔小新 2024-12-15 16:02:48
自Gradle 3.3起,复合构建功能得以实现,这是一种能够整合其他独立构建的高级构建模式。本文将详细介绍复合构建与多项目构建的区别,以及如何在实际项目中应用复合构建。 ...
[详细]
蜡笔小新 2024-12-14 12:48:59
本文介绍了一种在Android应用中实现带描边的圆角图片的方法。通过使用BitmapShader类,开发者可以轻松地为图片添加圆角和描边效果,提升应用的视觉体验。 ...
[详细]
蜡笔小新 2024-12-13 13:19:00
本文介绍了如何在Android应用中自定义绘制指南针视图,包括方位角的计算、不同方向的颜色区分以及视图随手势移动的功能实现。 ...
[详细]
蜡笔小新 2024-12-12 19:01:57
本文主要探讨了在实现Socket通信时,服务器端可能出现的端口冲突问题及其解决方案。通过具体示例和步骤指导,帮助读者理解和解决此类常见问题。 ...
[详细]
蜡笔小新 2024-12-12 18:47:46
Log4net是一款由Apache软件基金会开发的强大且灵活的日志记录工具,与Log4j同属一个系列。它支持多种日志记录方式,并能显著提升软件开发的效率。本文将详细介绍如何在ASP.NET Web Forms项目中集成Log4net。 ...
[详细]
蜡笔小新 2024-12-12 14:08:58
本文档不仅介绍XWiki作为一个增强版的wiki引擎,还深入探讨了其数据模型,该模型可在用户界面层面被充分利用。借助其强大的脚本能力,XWiki的数据模型支持从简单的应用到复杂的系统构建,几乎无需直接接触XWiki的核心组件。 ...
[详细]
蜡笔小新 2024-12-17 16:41:27
本文详细介绍了如何在Android应用中使用GridView组件以网格形式展示数据(如文本和图像)。通过行列布局,实现类似矩阵的数据展示效果。 ...
[详细]
蜡笔小新 2024-12-17 15:20:51
手机用户2502853373
这个家伙很懒,什么也没留下!