独孤幽灵 2013-09-29 02:52 采纳率: 0%
浏览 2605

关于C#的datagridview的自动排序

在使用datagridview的自动排序的时候,有一列是姓名,其中有中英文,点击表头自动排序后,英文按照头字母排序了,但是中文却没有,这是为嘛呢?哪位大神指点下,在线等结果!!最好代码也来!

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-24 12:33
    关注

    该回答引用ChatGPT

    在DataGridView中,如果你点击表头对某一列进行自动排序,它会默认使用该列的数据类型来进行排序。对于包含中文的姓名列,它的数据类型是字符串类型,因此按照Unicode字符编码排序,而不是按照拼音首字母排序。


    为了实现按照中文拼音排序,你可以使用自定义排序方法来对该列进行排序。以下是一个使用中文拼音排序的示例代码:

    using System.Collections;
    using System.Globalization;
    using System.Windows.Forms;
    
    public class PinyinComparer : IComparer
    {
        private CompareInfo compareInfo = CultureInfo.GetCultureInfo("zh-CN").CompareInfo;
    
        public int Compare(object x, object y)
        {
            if (x == null || y == null) {
                return 0;
            }
    
            string s1 = x.ToString();
            string s2 = y.ToString();
    
            if (s1.Length == 0 || s2.Length == 0) {
                return 0;
            }
    
            // 使用CompareInfo.Compare方法按照拼音首字母进行排序
            return compareInfo.Compare(s1, s2);
        }
    }
    
    // 在Form或者控件的构造函数中设置列的排序比较器
    dataGridView1.Columns["姓名"].SortMode = DataGridViewColumnSortMode.Automatic;
    dataGridView1.Columns["姓名"].SortComparer = new PinyinComparer();
    

    这个示例中,我们使用了PinyinComparer类作为自定义的排序方法。该类实现了IComparer接口,重写了Compare方法。在Compare方法中,我们首先将传入的两个对象转换为字符串类型。然后使用CompareInfo.Compare方法来比较两个字符串,这个方法可以按照拼音首字母进行排序。


    最后,在Form或者控件的构造函数中,我们设置了"姓名"列的SortMode为DataGridViewColumnSortMode.Automatic,表示该列支持自动排序。然后将"姓名"列的SortComparer属性设置为我们自定义的PinyinComparer对象,以便在排序时使用我们自定义的比较器。

    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R