public class ListViewAH : ListViewEx
{
#region 虚拟模式相关操作 ///<summary>
/// 前台行集合
///</summary>
public List<ListViewItem> CurrentCacheItemsSource
{ get; private set; } public ListViewAH()
{
this.CurrentCacheItemsSource = new List<ListViewItem>();
this.VirtualMode = true;
this.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView_RetrieveVirtualItem);
} ///<summary>
/// 重置listview集合
///</summary>
///<param name="items"></param>
public void ReSet(IList<ListViewItem> items)
{
this.CurrentCacheItemsSource.Clear();
this.CurrentCacheItemsSource = new List<ListViewItem>();
if ( null != items )
{
if ( items.Count > )
{
foreach ( var item in items )
{
this.CurrentCacheItemsSource.Add(item);
}
}
this.VirtualListSize = this.CurrentCacheItemsSource.Count;
}
else
this.VirtualListSize = ;
} /// <summary>
/// 追加项
/// </summary>
/// <param name="l"></param>
public void AppendListViewItem(IList<ListViewItem> l)
{
if ( this.CurrentCacheItemsSource == null || this.CurrentCacheItemsSource.Count <= )
{
ReSet(l);
return;
}
foreach ( var item in l )
{
this.CurrentCacheItemsSource.Add(item);
}
this.VirtualListSize = this.CurrentCacheItemsSource.Count;
} /// <summary>
/// 清空所有项
/// </summary>
public void ClearAllItem()
{
if ( this.CurrentCacheItemsSource == null || this.CurrentCacheItemsSource.Count <= )
{
return;
}
this.CurrentCacheItemsSource.Clear();
this.VirtualListSize = this.CurrentCacheItemsSource.Count;
} /// <summary>
/// 移除当前选中的项
/// </summary>
/// <param name="l"></param>
public void RemoveListViewItem(IList<ListViewItem> l)
{
if ( this.CurrentCacheItemsSource == null || this.CurrentCacheItemsSource.Count <= )
{
return;
}
foreach ( var item in l )
{
this.CurrentCacheItemsSource.Remove(item);
}
this.VirtualListSize = this.CurrentCacheItemsSource.Count;
} ///<summary>
/// 虚拟模式事件
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
private void listView_RetrieveVirtualItem(object sender , RetrieveVirtualItemEventArgs e)
{
if ( this.CurrentCacheItemsSource == null || this.CurrentCacheItemsSource.Count == )
{
return;
} ListViewItem lv = this.CurrentCacheItemsSource[e.ItemIndex];
e.Item = lv;
} ///<summary>
/// 获取选中的第一行的文本值
///</summary>
///<param name="key"></param>
///<returns></returns>
public string FirstSelectItemValue(string key)
{
int i = GetColumnsIndex(key); return this.CurrentCacheItemsSource[this.SelectedIndices[]].SubItems[i].Text;
} ///<summary>
/// 获取列名的索引
///</summary>
///<param name="key"></param>
///<returns></returns>
public int GetColumnsIndex(string key)
{
int i = ;
for ( ; i < this.Columns.Count ; i++ )
{
if ( this.Columns[i].Name == key )
{
break;
}
} return i;
} ///<summary>
/// 获取选中项
///</summary>
///<returns></returns>
public List<ListViewItem> GetSelectItem()
{
List<ListViewItem> l = new List<ListViewItem>();
if ( this.SelectedIndices.Count <= ) return null;
foreach ( var item in this.SelectedIndices )
{
l.Add(this.CurrentCacheItemsSource[int.Parse(item.ToString())]);
}
return l;
} ///<summary>
/// 获取选中行的某列集合
///</summary>
///<param name="key"></param>
///<returns></returns>
public List<string> GetListViewField(string key)
{
List<string> ids = new List<string>(); foreach ( var item in this.SelectedIndices )
{
string id = this.CurrentCacheItemsSource[int.Parse(item.ToString())].SubItems[GetColumnsIndex(key)].Text;
ids.Add(id);
}
return ids;
} private ListViewItemComparer mySorter;
///<summary>
/// 排序
///</summary>
///<param name="e"></param>
protected override void OnColumnClick(ColumnClickEventArgs e)
{
base.OnColumnClick(e); if ( this.mySorter == null )
{
this.mySorter = new ListViewItemComparer(e.Column , SortOrder.Ascending);
}
else
{
if ( this.mySorter.SortColumn == e.Column )
{
if ( this.mySorter.Order == SortOrder.Ascending )
{
this.mySorter.Order = SortOrder.Descending;
}
else
{
this.mySorter.Order = SortOrder.Ascending;
}
}
else
{
this.mySorter.SortColumn = e.Column;
this.mySorter.Order = SortOrder.Ascending;
} this.CurrentCacheItemsSource.Sort(this.mySorter); this.Invalidate();
}
}
#endregion #region ListView排序逻辑
///<summary>
/// ListView排序逻辑
///</summary>
private class ListViewItemComparer : System.Collections.Generic.IComparer<ListViewItem>
{
public ListViewItemComparer()
{
this.SortColumn = ;
this.Order = SortOrder.None;
} public ListViewItemComparer(int column)
: this()
{
this.SortColumn = column;
} ///<summary>
///
///</summary>
///<param name="column">哪列</param>
///<param name="sortOrder">排序方式</param>
public ListViewItemComparer(int column , SortOrder sortOrder)
: this(column)
{
Order = sortOrder;
} #region IComparer 成员
public int Compare(ListViewItem x , ListViewItem y)
{
int result = ;
string c1 = "";
string c2 = ""; try
{
c1 = x.SubItems[this.SortColumn].Text;
c2 = y.SubItems[this.SortColumn].Text;
}
catch ( Exception ex )
{
// MessageBox.Show(ex.Message);
return ;
}
result = string.Compare(c1 , c2);
if ( this.Order == SortOrder.Ascending )
{
return result;
}
else if ( this.Order == SortOrder.Descending )
{
return ( -result );
}
else
{
return ;
}
}
#endregion ///<summary>
/// 当前排序列
///</summary>
public int SortColumn
{
get;
set;
} ///<summary>
/// 当前列排序方式
///</summary>
public SortOrder Order
{
get;
set;
}
}
#endregion
}

使用listView普通模式加载大数据,会比较慢,即时使用线程加载,也会出现不断的刷新,故用虚拟模式下加载,速度快

本例中继承第三方控件的ListViewEx控件,也可以继承系统自带的ListView

ListView虚拟模式封装的更多相关文章

  1. WinForm ListView虚拟模式加载数据 提高加载速度

    将VirtualMode 属性设置为 true 会将 ListView 置于虚拟模式.控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualIt ...

  2. 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

    实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624 ...

  3. Skyline基本操作模式封装

    skyline基本操作模式 项目中基于skyline的浏览器插件进行二次开发,基本的业务操作模式如下: 工具栏:点击工具栏某个功能,开启操作模式. onFrame:鼠标移动预选对象,在能够拾取或者选定 ...

  4. HeadFirst设计模式笔记:(六)命令模式 —— 封装调用

    1.概念 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化.分离变化与不变的因素. 在面向对象的程序 ...

  5. 【Android】策略模式封装百度地图路线规划模块

    百度地图的Demo里有个路线规划的功能,但是,这个功能和Activity耦合性太高,所以需要单独抽离出路径规划功能,进行"解耦". 注:由于项目原因,本文只针对驾车路线规划进行封装 ...

  6. js原生设计模式——9外观模式封装

    1.事件处理程序兼容性封装 <!DOCTYPE html><html lang="en"><head>    <meta charset= ...

  7. js原生设计模式——3简单工厂模式\简单工厂模式封装简单对象

    1.Factory基本写法 <!DOCTYPE html><html lang="en"><head>    <meta charset= ...

  8. PO页面对象模式封装

    PO的主要价值体现在对界面交互细节的封装,这样可以使测试案例可以更关注与业务而非界面细节,提高测试案例的可读性.   以传统的登陆页面为例實現PO模式,因为每个用例中都需要登陆. 其中需要使用Page ...

  9. Facade 门面模式 封装 MD

    门面模式 简介 作用:封装系统功能,简化系统调用 门面模式要求一个系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行.门面模式提供一个高层次的接口,使得系统更易于使用. 门面模式的 ...

随机推荐

  1. drupal基本知识介绍

    2. Drupal 安装在安装Drupal前,你需要在服务器上先搭建一个PHP+MySQL环境.专业网站一般是安装LAMP(Linux+Apache+MySQL+PHP).环境的搭建可参考如下文章:  ...

  2. CF1061B Views Matter

    思路: 贪心. 实现: #include <bits/stdc++.h> using namespace std; ]; int main() { int n, m; while (cin ...

  3. 能挣钱的微信JSSDK+H5混合开发

    H5喊了那么久,有些人都说不实用,有些人却利用在微信中开发H5应用赚得盆满钵满.微信JSSDK + HTML 5,让移动Web开发与微信结合轻而易举!跨平台.零成本,让大众创业变得更方便. 我觉得现在 ...

  4. uvm_base——打好你的基础

    uvm_base 是个很有意思的文件,这是UVM很巧妙的设计,将所有在base中包含的文件都包含在uvm_base.svh, 这样很方便管理各个文件直接的关系,而且还可以看出一些我之前没看过的东西,比 ...

  5. (转)ASIC设计中各个阶段需要注意的问题——节选

    ASIC 的复杂性不断提高,同时工艺在不断地改进,如何在较短的时间内开发一个稳定的可重用的ASIC芯片的设计,并且一次性流片成功,这需要一个成熟的ASIC 的设计方法和开发流程.本文结合NCveril ...

  6. KVC/KVO 本质

    KVO 的实现原理 KVO是关于runtime机制实现的 当某个类的对象属性第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法.派生类 ...

  7. 使用 Azure 创建网络文件系统

    本快速入门介绍了如何使用 Azure 文件存储实现网络文件共享.在本教程中完成的所有操作均符合 1 元试用条件. 本快速入门介绍了如何使用 Azure 文件存储实现网络文件共享.在本教程中完成的所有操 ...

  8. webpack前端构建工具学习总结(三)之webpack.config.js配置文件

    Webpack 在执行的时候,除了在命令行传入参数,还可以通过指定的配置文件来执行.默认情况下,会搜索当前目录的 webpack.config.js 文件,这个文件是一个 node.js 模块,返回一 ...

  9. mac下只遍历目录不遍历文件

    install brew install tree 命令 tree -d

  10. 换个语言学一下 Golang (1)

    做技术的总是有些拗.这么多年一直在.net的框框里打转转.直到现在市场上.net工作越来越难找,项目越来越老才发现不做出改变不行了.就从学习Go开始吧. Go语言的特点 简洁.快速.安全 并行.有趣. ...