winform点击每列表头对数据进行排序,C#中对ListView的项排序后再修改程序后会报错

#纵使生活纵使那么的无望,我们也要坚强面对。加油!每一位为了生活而奋斗的打工人#

#遇事不要慌,先分析#

报错:列索引错误,并且只有完整数据的行才能完整的插入到listview中。

分析失败,直接暴力解决

#大路千万条,条条通罗马#

既然报错不能解决,我们可以选择两种方案:

  1. 使用两个listview,只要有排序就使用一个listview,另外一个隐藏,过于复杂,但是可行。

  1. 排序后对排序进行清除, 然后再排序就不会错误了,解决如下:

fileList.ListViewItemSorter = null;

说明一下,在这里使用ListView.Clear()不可以,依旧会报错。

代码原图包含排序:

 private void SetColumns(int column)
        {
            //判断选中排序的是那一列,并显示
            fileList.Columns[0].Text = "文件名称";
            fileList.Columns[1].Text = "创建时间";
            fileList.Columns[2].Text = "文件大小";
            fileList.Columns[3].Text = "文件类型";
            fileList.Columns[4].Text = "文件路径";
            if (columnstate[column])
            {
                switch (column)
                {
                    case 0:
                        fileList.Columns[0].Text = "文件名称↓";
                        break;
                    case 1:
                        fileList.Columns[1].Text = "创建时间↓";
                        break;
                    case 2:
                        fileList.Columns[2].Text = "文件大小↓";
                        break;
                    case 3:
                        fileList.Columns[3].Text = "文件类型↓";
                        break;
                    case 4:
                        fileList.Columns[4].Text = "文件路径↓";
                        break;
                }
            }
            else
            {
                switch (column)
                {
                    case 0:
                        fileList.Columns[0].Text = "文件名称↑";
                        break;
                    case 1:
                        fileList.Columns[1].Text = "创建时间↑";
                        break;
                    case 2:
                        fileList.Columns[2].Text = "文件大小↑";
                        break;
                    case 3:
                        fileList.Columns[3].Text = "文件类型↑";
                        break;
                    case 4:
                        fileList.Columns[4].Text = "文件路径↑";
                        break;
                }
            }
        }
        bool sortstate = false;
        bool[] columnstate = { true,true, true, true,true};//列表点击状态
        private void fileList_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            //if (sortstate)
            {
                SetColumns(e.Column);
                columnstate[e.Column] = !columnstate[e.Column];
                if (fileList.Columns[e.Column].Tag == null)
                {
                    fileList.Columns[e.Column].Tag = true;
                }
                bool tabk = (bool)fileList.Columns[e.Column].Tag;
                if (tabk)
                {
                    fileList.Columns[e.Column].Tag = false;
                }
                else
                {
                    fileList.Columns[e.Column].Tag = true;
                }
                fileList.ListViewItemSorter = new ListViewSort(e.Column, fileList.Columns[e.Column].Tag);
                fileList.Sort();
            }
        }
public class ListViewSort : IComparer
        {
            private int col;
            private bool desck;

            public ListViewSort()
            {
                col = 0;
            }
            public ListViewSort(int column, object Desc)
            {
                desck = (bool)Desc;
                col = column;
            }
            public int Compare(object x, object y)
            {
                    int tempInt = string.Compare(((ListViewItem)x).SubItems[col].Text,
                    ((ListViewItem)y).SubItems[col].Text);
                    if (desck)
                    {
                        return -tempInt;
                    }
                    else  
                    {
                        return tempInt;
                    }
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值