#纵使生活纵使那么的无望,我们也要坚强面对。加油!每一位为了生活而奋斗的打工人#
#遇事不要慌,先分析#
报错:列索引错误,并且只有完整数据的行才能完整的插入到listview中。
分析失败,直接暴力解决
#大路千万条,条条通罗马#
既然报错不能解决,我们可以选择两种方案:
使用两个listview,只要有排序就使用一个listview,另外一个隐藏,过于复杂,但是可行。
排序后对排序进行清除, 然后再排序就不会错误了,解决如下:
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;
}
}
}