C# winform listview 选中的复选框排序
3个回答
展开全部
ListView本身提供了ListViewItemSorter属性让用户实现自定义的排序。
增加以下代码可以实现你要的功能。
public class ListViewSorterAscending : System.Collections.IComparer
{
public int Compare(object x, object y)
{
//我们需要的是先对所有已选中的项目进行升序排列,然后对未选中的项目进行升序排列
ListViewItem c1 = x as ListViewItem;
ListViewItem c2 = y as ListViewItem;
if (c1.Checked && c2.Checked || !c1.Checked && !c2.Checked)
return c1.Text.CompareTo(c2.Text);
if (c1.Checked && !c2.Checked)
return -1;
if (!c1.Checked && c2.Checked)
return 1;
return 0;
}
}
在某处生成排序器的一个实例,赋值ListView的排序比较器属性:
myListView.ListViewItemSorter = new ListViewSorterAscending();
在Button的Click事件中写:
mylistView.Sort();
需要反向排序请自行改动排序器。
备注:本例排序中参考值是Item的Text属性,如需使用其他的属性进行排序请自行修改。
展开全部
你这个应该是硬编码的问题。如果实现排序的话,可以实现IComparer接口,但这并不能保证3在上面。而且ICompare你实现的排序还要去自己处理,数字的排序和字符串的排序肯定不一样的。
就你题目而言,最简单的放法就是
private List<ListViewItem> lvis = new List<ListViewItem>();
private void Form1_Load(object sender, EventArgs e)
{
ListViewItem lvi = new ListViewItem(new string[] { "数据1", "1", "2" });
ListViewItem lvi1 = new ListViewItem(new string[] { "数据2", "3", "4" });
ListViewItem lvi2 = new ListViewItem(new string[] { "数据3", "5", "6" });
this.listView1.Items.Add(lvi);
this.listView1.Items.Add(lvi1);
this.listView1.Items.Add(lvi2);
lvis.Add(lvi);
lvis.Add(lvi1);
lvis.Add(lvi2);
}
private void button1_Click(object sender, EventArgs e)
{
//先listview1清空
this.listView1.Items.Clear();
//绑定勾选的
for (int i = 0; i < lvis.Count; i++)
{
if (lvis[i].Checked)
{
this.listView1.Items.Add(lvis[i]);
lvis.Remove(lvis[i]);
break;
}
}
//绑定其他的
for (int i = 0; i < lvis.Count; i++)
{
this.listView1.Items.Add(lvis[i]);
}
//listview的item继续存入lvis
lvis.Clear();
for (int i = 0; i < this.listView1.Items.Count; i++)
{
lvis.Add(this.listView1.Items[i]);
}
}
就你题目而言,最简单的放法就是
private List<ListViewItem> lvis = new List<ListViewItem>();
private void Form1_Load(object sender, EventArgs e)
{
ListViewItem lvi = new ListViewItem(new string[] { "数据1", "1", "2" });
ListViewItem lvi1 = new ListViewItem(new string[] { "数据2", "3", "4" });
ListViewItem lvi2 = new ListViewItem(new string[] { "数据3", "5", "6" });
this.listView1.Items.Add(lvi);
this.listView1.Items.Add(lvi1);
this.listView1.Items.Add(lvi2);
lvis.Add(lvi);
lvis.Add(lvi1);
lvis.Add(lvi2);
}
private void button1_Click(object sender, EventArgs e)
{
//先listview1清空
this.listView1.Items.Clear();
//绑定勾选的
for (int i = 0; i < lvis.Count; i++)
{
if (lvis[i].Checked)
{
this.listView1.Items.Add(lvis[i]);
lvis.Remove(lvis[i]);
break;
}
}
//绑定其他的
for (int i = 0; i < lvis.Count; i++)
{
this.listView1.Items.Add(lvis[i]);
}
//listview的item继续存入lvis
lvis.Clear();
for (int i = 0; i < this.listView1.Items.Count; i++)
{
lvis.Add(this.listView1.Items[i]);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把整个项目代码发我看看
1720406057@qq.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询