C# Listview的運用匯總(winform)


本鳥,剛學winform。第一個數據控件就是碰到了listview。

以下是我了解到的幾個知識點,網上搜了好久,才實現以下功能。希望對新手有所幫助

1.創建表頭

View Code
 #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.讀取行數據

View Code
#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
//簡單的一個東西,我找了很久
lvList.CheckBoxes = true;

5.遍歷刪除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);
            }

        }

 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<T>中

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根據列名自動調整列寬

View Code
 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.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  

 11.讓選中行失去焦點后仍然保持天藍色

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;
                    }
                }
            }
        }

 12.遍歷listview把選中的用戶生成一個字符串數組

View Code
string[] str = new string[lvClients.CheckedItems.Count];
                for (int i = 0; i < lvClients.CheckedItems.Count; i++)
                {
                    str[i] = lvClients.CheckedItems[i].Text;
                }

 13.根據某些字段模糊查詢listview列表相關信息

View Code
 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);
                        }                      
                    }
                }               
            }
        }

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM