以下是我了解到Listview的几个知识点
1.创建表头
#region 给listview加表头: lvList.Columns.AddRange(new ColumnHeader[] { new ColumnHeader(){ Name="Mac",Text="Mac",Width=100}, new ColumnHeader(){ Name="Ip",Text="Ip地址",Width=100}, new ColumnHeader(){ Name="Port",Text="Port",Width=100}, new ColumnHeader(){ Name="Protocol",Text="Protocol",Width=100}, new ColumnHeader(){ Name="PackId",Text="AccessTime",Width=100}, new ColumnHeader(){ Name="AccessTime",Text="AccessTime",Width=100}, }); //选中一行 lvList.FullRowSelect = true; #endregion
2.把数据绑定到listview上
View Code #region 把序列化后的数据显示到listview上: lvList.Items.Clear(); foreach (CustomerServ result in rd.Results) { var lvi = new ListViewItem(result.Mac); lvi.SubItems.Add(result.Ip); lvi.SubItems.Add(result.Port.ToString()); lvi.SubItems.Add(result.Protocol); lvi.SubItems.Add(result.PackId.ToString()); lvi.SubItems.Add(result.AccessTime.ToString("yyyy-MM-dd HH:mm:ss")); lvList.Items.Add(lvi); } var c = 0; #endregion
3.读取行数据
#region 单击行读取行数据: if (this.lvList.SelectedItems.Count > 0) { txtClient.Text = this.lvList.SelectedItems[0].SubItems[0].Text; txtIP.Text = this.lvList.SelectedItems[0].SubItems[1].Text; txtPort.Text = this.lvList.SelectedItems[0].SubItems[2].Text; txtProtocol.Text = this.lvList.SelectedItems[0].SubItems[3].Text; txtPackId.Text = this.lvList.SelectedItems[0].SubItems[4].Text; txtAccessTime.Text = this.lvList.SelectedItems[0].SubItems[5].Text; } #endregion
4.遍历删除listview中checkbox被选中的记录
View Code /// <summary> /// 删除选中行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelete_Click(object sender, EventArgs e) { foreach (ListViewItem item in this.lvList.CheckedItems) { this.lvList.Items.RemoveAt(item.Index); } }
5.根据某些字段模糊查询listview列表相关信息
private void btnSelectA_Click(object sender, EventArgs e) { string _Mac = this.txtMac.Text; string _IP = this.txtIP.Text; lvList.Items.Clear(); foreach (CustomerServ result in a.Results) { if (_Mac.Trim().Length < 1 && _IP.Trim().Length < 1) { var lvi = new ListViewItem(result.Mac); lvi.SubItems.Add(result.Ip); lvi.SubItems.Add(result.Port.ToString()); lvi.SubItems.Add(result.Protocol); lvi.SubItems.Add(result.PackId.ToString()); lvi.SubItems.Add(result.AccessTime.ToString("yyyy-MM-dd HH:mm:ss")); lvList.Items.Add(lvi); } else { if(Convert.ToInt32(result.Mac.IndexOf(_Mac,0))==0) { if (Convert.ToInt32(result.Ip.IndexOf(_IP, 0)) == 0) { var lvi = new ListViewItem(result.Mac); lvi.SubItems.Add(result.Ip); lvi.SubItems.Add(result.Port.ToString()); lvi.SubItems.Add(result.Protocol); lvi.SubItems.Add(result.PackId.ToString()); lvi.SubItems.Add(result.AccessTime.ToString("yyyy-MM-dd HH:mm:ss")); lvList.Items.Add(lvi); } } } } }
6.checkbox的checked为true行变红,false时黑色
View Code private void lvList_ItemChecked(object sender, ItemCheckedEventArgs e) { ListViewItem MyItem = lvList.Items[e.Item.Index]; foreach (ListViewItem item in this.lvList.Items) { if (MyItem.Checked) { MyItem.ForeColor = System.Drawing.Color.Red; } else { MyItem.ForeColor = System.Drawing.Color.Black; } } }
7.遍历listview,把上面的数据存到list中
View Code List<CustomerServ> m_CustomerServList = new List<CustomerServ>(); foreach (ListViewItem item in lvList.Items) { m_CustomerServList.Add(new CustomerServ() { Mac = item.SubItems[0].Text, Ip = item.SubItems[1].Text, Port = item.SubItems[2].Text, Protocol = item.SubItems[3].Text, PackId = Convert.ToInt32(item.SubItems[4].Text), AccessTime = Convert.ToDateTime(item.SubItems[5].Text) }); }
8.listview根据列名自动调整列宽
lvList.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
9.listview列排序
View Code //使用 IComparer接口。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Windows.Forms; namespace EtcommTest { class ListViewColumnSorter : IComparer { private int ColumnToSort;// 指定按照哪个列排序 private SortOrder OrderOfSort;// 指定排序的方式 private CaseInsensitiveComparer ObjectCompare;// 声明CaseInsensitiveComparer类对象, public ListViewColumnSorter()// 构造函数 { ColumnToSort = 0;// 默认按第一列排序 OrderOfSort = SortOrder.None;// 排序方式为不排序 ObjectCompare = new CaseInsensitiveComparer();// 初始化CaseInsensitiveComparer类对象 } // 重写IComparer接口. // <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns> public int Compare(object x, object y) { int compareResult; ListViewItem listviewX, listviewY; // 将比较对象转换为ListViewItem对象 listviewX = (ListViewItem)x; listviewY = (ListViewItem)y; // 比较 compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text); // 根据上面的比较结果返回正确的比较结果 if (OrderOfSort == SortOrder.Ascending) { // 因为是正序排序,所以直接返回结果 return compareResult; } else if (OrderOfSort == SortOrder.Descending) { // 如果是反序排序,所以要取负值再返回 return (-compareResult); } else { // 如果相等返回0 return 0; } } /// 获取或设置按照哪一列排序. public int SortColumn { set { ColumnToSort = value; } get { return ColumnToSort; } } /// 获取或设置排序方式. public SortOrder Order { set { OrderOfSort = value; } get { return OrderOfSort; } } } } *********************************** public Main() { InitializeComponent(); // 创建一个ListView排序类的对象,并设置lvList的排序器 lvwColumnSorter = new ListViewColumnSorter(); this.lvList.ListViewItemSorter = lvwColumnSorter; } ListViewColumnSorter lvwColumnSorter; //单击列标头时触发 private void lvList_ColumnClick(object sender, ColumnClickEventArgs e) { // 检查点击的列是不是现在的排序列. if (e.Column == lvwColumnSorter.SortColumn) { // 重新设置此列的排序方法. if (lvwColumnSorter.Order == SortOrder.Ascending) { lvwColumnSorter.Order = SortOrder.Descending; } else { lvwColumnSorter.Order = SortOrder.Ascending; } } else { // 设置排序列,默认为正向排序 lvwColumnSorter.SortColumn = e.Column; lvwColumnSorter.Order = SortOrder.Ascending; } // 用新的排序方法对ListView排序 this.lvList.Sort(); }
10.让选中行失去焦点后仍然保持天蓝色
View Code /// <summary> /// listview的SelectedIndexChanged事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lvList_SelectedIndexChanged(object sender, EventArgs e) { if (lvList.FocusedItem != null) { if (this.lvList.SelectedItems.Count > 0) { if (lvList.SelectedItems[0].BackColor == SystemColors.Highlight) { lvList.SelectedItems[0].BackColor = Color.White; lvList.SelectedItems[0].ForeColor = Color.Black; lvList.SelectedItems.Clear(); } else { lvList.FocusedItem.BackColor = SystemColors.Highlight; lvList.FocusedItem.ForeColor = Color.White; } } } }
11.遍历listview把选中的用户生成一个字符串数组
string[] str = new string[lvClients.CheckedItems.Count]; for (int i = 0; i < lvClients.CheckedItems.Count; i++) { str[i] = lvClients.CheckedItems[i].Text; }
12.listview分页
View Code private static int totalcount = 0;//记录数 private static int pageIndex = 1; //当前页 private static int pageSize = 10; //每页条数 private static int pageCount = (totalcount / pageSize) + (totalcount % pageSize == 0 ? 0 : 1); //总页数 public List<LogItem> Items; #region Listview分页: private void CalcPageStatus(List<LogItem> MyList, int pageSize, int pIndex) { totalcount = MyList.Count; pageCount = (totalcount / pageSize) + (totalcount % pageSize == 0 ? 0 : 1); pageIndex = pIndex; if (null == MyList) { return; } var list = new List<LogItem>(); //跳到首页 if (pageIndex == 1) { if (totalcount > pageSize) { for (int i = 0; i < pageSize; i++) { list.Add(MyList[i]); } if (pageCount == 1) { _tsbnextPage.Enabled = false; } else { _tsbnextPage.Enabled = true; } } else { for (int i = 0; i < totalcount; i++) { list.Add(MyList[i]); } _tsbnextPage.Enabled = false; } _tsbprevPage.Enabled = false; } //跳到尾页 if (pageIndex >= pageCount && pageIndex > 1) { int count = MyList.Count - (pageCount - 1) * pageSize; for (int i = 0; i < count; i++) { list.Add(MyList[i + pageSize * (pageCount - 1)]); } if (pageIndex > 1) { _tsbprevPage.Enabled = true; } _tsbnextPage.Enabled = false; } //跳到中间页 if (pageIndex > 1 && pageIndex < pageCount) { for (int i = 0; i < pageSize; i++) { list.Add(MyList[i + pageSize * (pageIndex - 1)]); } _tsbprevPage.Enabled = true; _tsbnextPage.Enabled = true; } _tsplblMessage.Text = " 总页数:" + pageCount + " 每页显示:"; FillLvLogs(list); TsbCPageAddItem(); TsbCPageChange(); Color(); } /// <summary> /// 添加当前页的Item /// </summary> public void TsbCPageAddItem() { _tsbCPage.Items.Clear(); for (int i = 0; i < pageCount; i++) { _tsbCPage.Items.Add(1 + i); } } /// <summary> /// 判断当前页显示 /// </summary> public void TsbCPageChange() { flage = false; TsbCPageAddItem(); if (pageIndex == 1) { _tsbCPage.SelectedIndex = pageIndex - 1; } if (pageIndex >= pageCount && pageIndex > 1) { _tsbCPage.SelectedIndex = pageCount - 1; } if (pageIndex > 1 && pageIndex < pageCount) { _tsbCPage.SelectedIndex = pageIndex - 1; } flage = true; } /// <summary> /// 首页 /// </summary> public void LvHomePage() { if (totalcount > 0) { CalcPageStatus(Items, pageSize, 1); } } /// <summary> /// 末页 /// </summary> public void LvLastPage() { if (totalcount > 0) { CalcPageStatus(Items, pageSize, pageCount); } } /// <summary> /// 上一页 /// </summary> public void LvPageDown() { int index = Convert.ToInt32(_tsbCPage.Text) - 1; CalcPageStatus(Items, pageSize, index); } /// <summary> /// 下一页 /// </summary> public void LvPageUp() { int index = Convert.ToInt32(_tsbCPage.Text) + 1; CalcPageStatus(Items, pageSize, index); } #endregion