为ListView添加自动列宽调整和点击列表头自动排序功能
2009-04-29 15:04
399 查看
.Net 2.0中,ListView中虽然增加了AutoResizeColumns函数,允许自动对列宽进行调整,但是对于其中的
也就是根据内容自动调整大小的效果却差强人意,因此决定自己动手写一个函数对其允许根据列的内容动态调整大小。下面就是动态调整列宽的函数源码:
这里先使用了函数
目的在于先根据列表头调整大小,初始化MaxWidth为列表头的宽度。
这样就完成了列宽的自动调整。
下面介绍一下列的排序功能。
要对列进行排序,首先要简历自己的排序函数,如下:
其中descK用于描述排列顺序是顺序还是逆序。这是个bool值,绑定在该列的Tag中。
下面就是点击列标头时的事件处理:
这样,就简单的完成了对ListView中点击列时的排序功能了~
AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)
也就是根据内容自动调整大小的效果却差强人意,因此决定自己动手写一个函数对其允许根据列的内容动态调整大小。下面就是动态调整列宽的函数源码:
private void AutoResizeColumnWidth(ListView lv) { int count = lv.Columns.Count; int MaxWidth = 0; Graphics graphics=lv.CreateGraphics(); Font font = lv.Font; ListView.ListViewItemCollection items = lv.Items; string str; int width; lv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); for (int i = 0; i < count; i++) { str = lv.Columns[i].Text; MaxWidth = lv.Columns[i].Width; foreach (ListViewItem item in items) { str = item.SubItems[i].Text; width = (int)graphics.MeasureString(str, font).Width; if (width > MaxWidth) { MaxWidth = width; } } if (i == 0) { lv.Columns[i].Width = lv.SmallImageList.ImageSize.Width + MaxWidth; } lv.Columns[i].Width = MaxWidth; } }
这里先使用了函数
lv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
目的在于先根据列表头调整大小,初始化MaxWidth为列表头的宽度。
这样就完成了列宽的自动调整。
下面介绍一下列的排序功能。
要对列进行排序,首先要简历自己的排序函数,如下:
class MyListViewSort : System.Collections.IComparer { private int col; private bool descK; public MyListViewSort() { col = 0; } public MyListViewSort(int column, object Desc) { descK = (bool)Desc; col = column; //当前列,0,1,2...,参数由ListView控件的ColumnClick事件传递 } 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; } }
其中descK用于描述排列顺序是顺序还是逆序。这是个bool值,绑定在该列的Tag中。
下面就是点击列标头时的事件处理:
private void listView_ColumnClick(object sender, ColumnClickEventArgs e) { ListView lv = (ListView)sender; if (lv.Columns[e.Column].Tag == null) lv.Columns[e.Column].Tag = true; bool tabK = (bool)lv.Columns[e.Column].Tag; if (tabK) lv.Columns[e.Column].Tag = false; else lv.Columns[e.Column].Tag = true; lv.ListViewItemSorter = new MyListViewSort(e.Column, lv.Columns[e.Column].Tag); //指定排序器并传送列索引与升序降序关键字 lv.Sort();//对列表进行自定义排序 }
这样,就简单的完成了对ListView中点击列时的排序功能了~
相关文章推荐
- 为ListView添加自动列宽调整和点击列表头自动排序功能
- 为ListView添加自动列宽调整和点击列表头自动排序功能
- 为ListView添加自动列宽调整和点击列表头自动排序功能
- C#为ListView添加自动列宽调整和点击列表头自动排序功能
- 两个MSFlexGrid的函数 点击表头排序函数以及依据内容自动调整列宽为最合适的宽度
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- DBGrid控件“点击标题栏自动排序功能”
- Android 仿联系人列表 实现ListView的A-Z字母排序和过滤搜索功能
- C#:ListView控件如何实现点击列表头进行排序?
- [转载]实现ListView的列标头点击排序功能