listview winfrom 表头_C# Winform ListView使用

以下内容均来自网上,个人收集整理,具体出处也难确认了,就没写出处了;

一、基本使用:

listView.View = View.Details;//设置视图

listView.SmallImageList = imageList;//设置图标

//添加列

listView.Columns.Add("本地路径", 150, HorizontalAlignment.Left);

listView.Columns.Add("远程路径", 150, HorizontalAlignment.Left);

listView.Columns.Add("上传状态", 80, HorizontalAlignment.Left);

listView.Columns.Add("耗时", 80, HorizontalAlignment.Left);

//添加行

var item = new ListViewItem();

item.ImageIndex = 1;

item.Text = name; //本地路径

item.SubItems.Add(path); //远程路径

item.SubItems.Add("ok"); //执行状态

item.SubItems.Add("0.5"); //耗时统计

listView.BeginUpdate();

listView.Items.Add(item);

listView.Items[listView.Items.Count - 1].EnsureVisible();//滚动到最后

listView.EndUpdate();

二、动态添加记录,ListView不闪烁:

1.新建一个C# 类,命名为ListViewNF(NF=Never/No Flickering)

2.复制如下代码

class ListViewNF : System.Windows.Forms.ListView

{

public ListViewNF()

{

// Activate double buffering

this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

// Enable the OnNotifyMessage event so we get a chance to filter out

// Windows messages before they get to the form's WndProc

this.SetStyle(ControlStyles.EnableNotifyMessage, true);

}

protected override void OnNotifyMessage(Message m)

{

//Filter out the WM_ERASEBKGND message

if (m.Msg != 0x14)

{

base.OnNotifyMessage(m);

}

}

}3.修改你的WinForm对应的xxxx.Design.cs,将系统默认生成的System.Windows.Forms.ListView改为ListViewNF即可。

三、动态添加记录,跳转到最后行:

实现代码:ListViewItem Item = new ListViewItem();

Item.SubItems.Clear();

.....相关其他代码

this.listView1.Items.Add(Item);

Item.EnsureVisible(); //关键的实现函数

四、点击表头实现排序:

1.增加自定义排序类:

using System;

using System.Collections;

using System.Windows.Forms;

namespace Whir.Software.Framework.UI

{

public class ListViewSort : IComparer

{

private readonly int _col;

private readonly bool _descK;

public ListViewSort()

{

_col = 0;

}

public ListViewSort(int column, object desc)

{

_descK = (bool)desc;

_col = column; //当前列,0,1,2...,参数由ListView控件的ColumnClick事件传递

}

public int Compare(object x, object y)

{

int tempInt = String.CompareOrdinal(((ListViewItem)x).SubItems[_col].Text,

((ListViewItem)y).SubItems[_col].Text);

if (_descK)

{

return -tempInt;

}

return tempInt;

}

}

}2.给ListView增加点击表头事件:

private void listView_ColumnClick(object sender, ColumnClickEventArgs e)

{

if (listView.Columns[e.Column].Tag == null)

{

listView.Columns[e.Column].Tag = true;

}

var tabK = (bool)listView.Columns[e.Column].Tag;

listView.Columns[e.Column].Tag = !tabK;

listView.ListViewItemSorter = new ListViewSort(e.Column, listView.Columns[e.Column].Tag);

//指定排序器并传送列索引与升序降序关键字

listView.Sort();//对列表进行自定义排序

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值