C# 对列标题上的 datagridview 进行排序

问题描述 投票:0回答:1

:) 我有一个 datagridview,并通过列表填充它(我从 2 个文本文件获取数据),但是当我尝试单击列标题(我尝试使用所有列标题)时,我无法对 datagridview 数据进行排序。这是我的代码:

 public class Data1
    {
        public string Campionato { get; set; }
        public string Data { get; set; }
        public string Home { get; set; }
        public string Away { get; set; }
        public int HSFT { get; set; }
        public int ASFT { get; set; }
        public int HSHT { get; set; }
        public int ASHT { get; set; }
        public int HSSH { get; set; }
        public int ASSH { get; set; }
    }

    public class Data2 
    {
        public string Home { get; set; }
        public string Away { get; set; }
        public int HSFT { get; set; }
        public int ASFT { get; set; }
        public string HODD { get; set; }
        public string XODD { get; set; }
        public string AODD { get; set; } //no name in sample
        public string Data { get; set; }
        public string RisFin { get; set; } //no name in sample
        public string Over05SH { get; set; }
        public string Over05HT { get; set; }
        public string Over15HT { get; set; }
        public string Over05FT { get; set; }
        public string Over15FT { get; set; }
        public string Over25FT { get; set; }
        public string Over35FT { get; set; }
        public string Over45FT { get; set; }



    }

    public class CombinedData 
    {
        public string Campionato { get; set; }
        public string Data { get; set; }
        public string Home { get; set; }
        public string Away { get; set; }
        public int HSFT { get; set; }
        public int ASFT { get; set; }
        public int HSHT { get; set; }
        public int ASHT { get; set; }
        public int HSSH { get; set; }
        public int ASSH { get; set; }
        public string HODD { get; set; }
        public string XODD { get; set; }
        public string AODD { get; set; } //some name
        public string RisFin { get; set; } //no name in sample
        public string Over05SH { get; set; }
        public string Over05HT { get; set; }
        public string Over15HT { get; set; }
        public string Over05FT { get; set; }
        public string Over15FT { get; set; }
        public string Over25FT { get; set; }
        public string Over35FT { get; set; }
        public string Over45FT { get; set; }

    }

var data1 = File.ReadAllLines("read" + campionatoselezTxt.Text + "stats.txt").ToList();
        var data2 = File.ReadAllLines("read" + campionatoselezTxt.Text + "bex.txt").ToList();


        var dataList1 = new List<Data1>();
        foreach (var data in data1)
        {
            var columns = data.Split(';'); 
            dataList1.Add(new Data1
            {
                Campionato = columns[0],
                Data = columns[1],
                Home = columns[2],
                Away = columns[3],

                HSFT = int.Parse(columns[4]),
                ASFT = int.Parse(columns[5]),
                HSHT = int.Parse(columns[6]),
                ASHT = int.Parse(columns[7]),
                HSSH = int.Parse(columns[8]),
                ASSH = int.Parse(columns[9])
                //other int properties
            });
        }

        var dataList2 = new List<Data2>();
        foreach (var data in data2)
        {
            var columns = data.Split(';'); 
            dataList2.Add(new Data2
            {
                Home = columns[0],
                Away = columns[1],
                HODD = columns[4],
                XODD = columns[5],
                AODD = columns[6],


            });
        }

        var combinedDataList = from d1 in dataList1 
                               //join d2 in dataList2 on d1.Home equals d2.Home
                               join d2 in dataList2 on new { d1.Home, d1.Away } equals new { d2.Home, d2.Away }

                               select new CombinedData
                               {
                                   Campionato = d1.Campionato,
                                   Data = d1.Data,
                                   Home = d2.Home,
                                   Away = d2.Away,
                                   HSFT = d1.HSFT,
                                   ASFT = d1.ASFT,
                                   HSHT = d1.HSHT,
                                   ASHT = d1.ASHT,
                                   HSSH = d1.HSSH,
                                   ASSH = d1.ASSH,
                                   HODD = d2.HODD,
                                   XODD = d2.XODD,
                                   AODD = d2.AODD,
                                   RisFin = d2.RisFin,
                                   Over05SH = d2.Over05SH

                               }; //map all properties

        finabexDgv.DataSource = combinedDataList.ToList(); 
        finabexDgv.AllowUserToOrderColumns = true;   

我希望能够通过单击列标题进行排序。

我需要你的建议,请:)

周日快乐!

c# sorting datagridview
1个回答
0
投票

在您的设计视图中,搜索“ColumnHeaderMouseClick”并双击空白字段。

在新函数上,应用如下代码:

dgv_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (dgv.Columns[e.ColumnIndex].SortMode != DataGridViewColumnSortMode.NotSortable)
            {
                if (e.ColumnIndex == newSortColumn )
                {
                    if (newColumnDirection == ListSortDirection.Ascending)
                        newColumnDirection = ListSortDirection.Descending;
                    else
                        newColumnDirection = ListSortDirection.Ascending;
                }

                newSortColumn = e.ColumnIndex;

                switch (newColumnDirection)
                {
                    case ListSortDirection.Ascending:
                        dgv.Sort(dgv.Columns[newSortColumn], ListSortDirection.Ascending);
                        break;
                    case ListSortDirection.Descending:
                        dgv.Sort(dgv.Columns[newSortColumn], ListSortDirection.Descending);
                        break;
                }
            }
}

并在类的顶部添加两个私有变量:

int newSortColumn;
ListSortDirection newColumnDirection = ListSortDirection.Ascending;

如果您的源代码中没有其他罕见的内容,这将起作用。

注意:这段代码不是我的,我是在 stackoverflow 上得到的

© www.soinside.com 2019 - 2024. All rights reserved.