最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文掌握C# ListView控件的用法和示例代碼

 更新時間:2024年02月01日 15:58:37   作者:求知青年  
ListView控件提供了豐富的屬性和事件,可以用于實現(xiàn)各種各樣的表格視圖,包括帶有單元格編輯、排序和分組等功能,本文介紹了一些常見的?ListView?控件的用法和示例代碼,感興趣的朋友一起看看吧

ListView 是一種多列的列表視圖控件,可以用于展示多個數(shù)據(jù)項及其相關(guān)信息。ListView 控件提供了豐富的屬性和事件,可以用于實現(xiàn)各種各樣的表格視圖,包括帶有單元格編輯、排序和分組等功能。

下面我們通過幾個示例來演示如何使用 ListView 控件。

示例一:基本使用

在這個示例中,我們將創(chuàng)建一個基本的 ListView 控件,并在其中添加三列數(shù)據(jù) —— 姓名、電話和地址。我們將使用 Items 屬性向 ListView 控件中添加數(shù)據(jù),每位客戶信息將占用 ListView 中的一行,每個屬性將在一行中的不同列中顯示。以下是示例代碼:

private void Form1_Load(object sender, EventArgs e)
{
    // 創(chuàng)建三列,分別代表姓名、電話和地址
    var colName = new ColumnHeader();
    colName.Text = "姓名";
    colName.Width = 100;
    var colPhone = new ColumnHeader();
    colPhone.Text = "電話";
    colPhone.Width = 150;
    var colAddress = new ColumnHeader();
    colAddress.Text = "地址";
    colAddress.Width = 200;
    // 添加列到 ListView 控件中
    listView1.Columns.Add(colName);
    listView1.Columns.Add(colPhone);
    listView1.Columns.Add(colAddress);
    // 添加客戶信息到 ListView 控件中
    ListViewItem item1 = new ListViewItem("張三");
    item1.SubItems.Add("123456789");
    item1.SubItems.Add("北京市海淀區(qū)");
    ListViewItem item2 = new ListViewItem("李四");
    item2.SubItems.Add("234567890");
    item2.SubItems.Add("上海市浦東新區(qū)");
    ListViewItem item3 = new ListViewItem("王五");
    item3.SubItems.Add("345678901");
    item3.SubItems.Add("廣州市天河區(qū)");
    listView1.Items.Add(item1);
    listView1.Items.Add(item2);
    listView1.Items.Add(item3);
}

在這個代碼中,我們首先創(chuàng)建了三個 ColumnHeader 對象,分別表示列表視圖中的三列 —— 姓名、電話和地址。我們使用 Text 屬性來設置每列的標題,使用 Width 屬性來設置每列的寬度,然后添加這三列到 ListView 控件中。在添加每列時,我們將其添加到 Columns 集合中,從而在列表視圖中創(chuàng)建新列。

接下來,我們使用 ListViewItem 對象和 SubItems 屬性來填充每一行的數(shù)據(jù)。在這個示例中,我們手動創(chuàng)建了三個對象,每個對象分別代表一個客戶的姓名、電話和地址。我們將每個對象添加到 Items 集合中,從而在列表視圖中創(chuàng)建新的行。我們使用 Add 方法添加每個 ListViewItem 對象到 Items 集合中,從而在列表視圖中創(chuàng)建新行。我們使用 SubItems 屬性來添加每個行中的列屬性,這可以幫助我們顯示多列數(shù)據(jù)。

示例二:動態(tài)添加和刪除行

在這個示例中,我們將動態(tài)地添加和刪除行。我們創(chuàng)建了兩個按鈕,一個用于添加行,一個用于刪除選中的行。我們將添加兩個事件處理程序,來響應用戶單擊這兩個按鈕的操作。以下是示例代碼:

private void btnAdd_Click(object sender, EventArgs e)
{
    // 顯示一個對話框,引導用戶輸入新的客戶信息(姓名、電話、地址)
    using (var dlg = new AddCustomerDialog())
    {
        var result = dlg.ShowDialog();
        if (result == DialogResult.OK)
        {
            // 當用戶單擊“確定”按鈕時,添加一行數(shù)據(jù)到 ListView 控件中
            var item = new ListViewItem(dlg.Customer.Name);
            item.SubItems.Add(dlg.Customer.Phone);
            item.SubItems.Add(dlg.Customer.Address);
            listView1.Items.Add(item);
        }
    }
}
private void btnDelete_Click(object sender, EventArgs e)
{
    // 刪除選中的行
    foreach (ListViewItem item in listView1.SelectedItems)
    {
        listView1.Items.Remove(item);
    }
}

在這個代碼中,我們首先創(chuàng)建了兩個事件處理程序,一個用于添加行,一個用于刪除選中的行。在添加行的事件處理程序中,我們使用 AddCustomerDialog 模式對話框,引導用戶輸入新的客戶信息。當用戶單擊“確定”按鈕時,我們獲取模式對話框中輸入的客戶信息,創(chuàng)建一個新的 ListViewItem 的 ListViewItem 對象并將其添加到 ListView 控件的項集合中,從而在列表視圖中創(chuàng)建新行。注意,我們在添加新行之前,需要先檢查用戶單擊了模式對話框的“確定”按鈕,確保用戶輸入了有效的客戶信息。在刪除選中行的事件處理程序中,我們簡單地遍歷 SelectedItems 集合,對于每個選定的 ListViewItem 對象,使用 Remove 方法將其從 ListView 控件的項集合中移除。刪除行的過程中,我們沒有檢查是否選擇了任何行,但需要注意,如果未選擇任何行,則 SelectedItems 集合將為空,而刪除行的代碼將什么也不做。

示例三:自定義列

在這個示例中,我們將向 ListView 控件中添加一個具有自定義列的數(shù)據(jù)。我們將創(chuàng)建一個新的 ListView 子類,覆蓋 OnCreateControl 方法以向控件中添加自定義列。在自定義列的列標題區(qū)域中,我們將添加一個新的按鈕控件,用于在列標題被單擊時觸發(fā)事件。以下是示例代碼:

public class CustomListView : ListView
{
    private ColumnHeader customColumnHeader = null;
    protected override void OnCreateControl()
    {
        base.OnCreateControl();
        AddCustomColumn();
    }
    private void AddCustomColumn()
    {
        // 創(chuàng)建自定義列表頭
        customColumnHeader = new ColumnHeader();
        customColumnHeader.Text = "操作";
        customColumnHeader.Width = 100;
        this.Columns.Add(customColumnHeader);
        // 添加按鈕到自定義列表頭中
        var btn = new Button();
        btn.Text = "新建客戶";
        btn.AutoSize = true;
        btn.Click += (sender, e) =>
        {
            // TODO: 在這里添加新客戶的代碼
        };
        customColumnHeader.TextAlign = HorizontalAlignment.Center;
        customColumnHeader.Control = btn;
    }
}

在這個代碼中,我們創(chuàng)建了一個名為 CustomListView 的新類,并繼承了 ListView。我們覆蓋了 OnCreateControl 方法,在控件第一次創(chuàng)建時添加了一個自定義列。我們創(chuàng)建了一個 ColumnHeader 對象來表示自定義列的列頭,將自定義列添加到控件的 Columns 集合中。我們在 ColumnHeader 控件的 Control 屬性中添加了按鈕控件,該按鈕控件將出現(xiàn)在列頭中。在點擊按鈕時,我們可能通過添加代碼來處理與新客戶相關(guān)的操作。

值得注意的是,為了確保按鈕僅占列頭中的一部分,我們通過 AutoSize 屬性來將控件的大小調(diào)整為其包含的內(nèi)容同樣的大小,從而將按鈕置于列頭的最前面。我們通過 TextAlign 屬性和 HorizontalAlignment.Center 值來使按鈕在整個列頭中居中。

這個示例只是展示了如何向 ListView 控件中添加具有自定義列的數(shù)據(jù),而按鈕的具體事件處理程序需要根據(jù)具體的需求來自行定義。

當然有,這里再介紹一下 ListView 控件的集成視圖模式和虛擬模式。

集成視圖模式

集成視圖模式允許將數(shù)據(jù)通過關(guān)聯(lián)到 ListView 控件來顯示。在這個模式下,我們可以指定一個數(shù)據(jù)源,該數(shù)據(jù)源必須實現(xiàn) IList 接口。在這個模式下,當我們向 Items 集合中添加數(shù)據(jù)時,實際上是將數(shù)據(jù)項添加到數(shù)據(jù)源中。以下是使用集成視圖模式實現(xiàn)的示例代碼:

private void Form1_Load(object sender, EventArgs e)
{
    // 創(chuàng)建數(shù)據(jù)源
    var customers = new List<Customer>();
    customers.Add(new Customer() { Name = "張三", Phone = "123456789", Address = "北京市海淀區(qū)" });
    customers.Add(new Customer() { Name = "李四", Phone = "234567890", Address = "上海市浦東新區(qū)" });
    customers.Add(new Customer() { Name = "王五", Phone = "345678901", Address = "廣州市天河區(qū)" });
    // 關(guān)聯(lián)數(shù)據(jù)源和 ListView 控件
    listView1.View = View.Details;
    listView1.VirtualListSize = customers.Count;
    listView1.RetrieveVirtualItem += (s, args) =>
    {
        var customer = customers[args.ItemIndex];
        args.Item = new ListViewItem(customer.Name);
        args.Item.SubItems.Add(customer.Phone);
        args.Item.SubItems.Add(customer.Address);
    };
}

在這個代碼中,我們創(chuàng)建了一個 List<Customer> 對象,并添加了幾個客戶信息。然后,我們將 View 屬性設置為 Details,并將 VirtualListSize 屬性設置為數(shù)據(jù)源的大小。我們使用 RetrieveVirtualItem 事件來提供數(shù)據(jù)。在這個事件中,我們使用 ListViewItem 和 SubItems 屬性來向 ListView 控件中填充每行的數(shù)據(jù)。使用虛擬列表改進了數(shù)據(jù)量較大時的渲染速度。

虛擬模式

當我們需要顯示大量數(shù)據(jù)時,使用虛擬模式可以顯著提高 ListView 控件的性能。在虛擬模式下,ListView 控件只在需要顯示時才從數(shù)據(jù)源中檢索數(shù)據(jù)。以下是使用虛擬模式實現(xiàn)的示例代碼:

private void Form1_Load(object sender, EventArgs e)
{
    // 創(chuàng)建數(shù)據(jù)源
    var customers = new List<Customer>();
    for (int i = 1; i <= 100000; i++)
    {
        customers.Add(new Customer() { Name = $"客戶{i}", Phone = $"Phone {i}", Address = $"Address {i}" });
    }
    // 設置列表視圖的樣式和虛擬模式
    listView1.View = View.Details;
    listView1.VirtualMode = true;
    listView1.VirtualListSize = customers.Count;
    // 為列添加數(shù)據(jù)
    listView1.Columns.Add("姓名");
    listView1.Columns.Add("電話");
    listView1.Columns.Add("地址");
    listView1.RetrieveVirtualItem += (s, args) =>
    {
        var customer = customers[args.ItemIndex];
        var item = new ListViewItem(customer.Name);
        item.SubItems.Add(customer.Phone);
        item.SubItems.Add(customer.Address);
        args.Item = item;
    };
}

在這個代碼中,我們創(chuàng)建了一個包含 100,000 條客戶信息的數(shù)據(jù)源,并將 VirtualMode 屬性設置為 true。然后,我們將 View 屬性設置為 Details,并為每列添加的標題。在 RetrieveVirtualItem 事件中在 RetrieveVirtualItem 事件中,我們首先獲取 itemIndex 對應的數(shù)據(jù)項,然后將其添加到 ListViewItem 對象中并通過 args.Item 返回該項,從而使它在控件中顯示。注意,由于在虛擬模式下,只有控件需要顯示的項才會從數(shù)據(jù)源中檢索,因此該事件在控件滾動時會被多次調(diào)用,以獲取相應項的數(shù)據(jù)。

需要注意的是,使用虛擬模式時,如果要添加行、刪除行或者更新行等操作,我們需要在數(shù)據(jù)源中進行相應的修改,而不是直接在 Items 集合中進行相應的操作。

使用虛擬模式時,控件只會從數(shù)據(jù)源中檢索需要顯示的數(shù)據(jù),而不會將整個數(shù)據(jù)源加載到內(nèi)存中。因此,在大量數(shù)據(jù)的情況下,虛擬模式可以有效節(jié)省內(nèi)存和提高控件性能。

以上是一些常見的 ListView 控件的用法和示例代碼。當然,ListView 控件的功能遠不止于此,還提供了許多其他的屬性和事件,如單元格編輯、排序、分組、滿屏顯示等,您可以根據(jù)自己的需求自由選擇和使用。

到此這篇關(guān)于一文掌握C# ListView 的用法的文章就介紹到這了,更多相關(guān)C# ListView 用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • DevExpress之SplashScreen用法實例

    DevExpress之SplashScreen用法實例

    這篇文章主要介紹了DevExpress中SplashScreen的用法,對于C#初學者有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • WinForm實現(xiàn)為ComboBox綁定數(shù)據(jù)源并提供下拉提示功能

    WinForm實現(xiàn)為ComboBox綁定數(shù)據(jù)源并提供下拉提示功能

    這篇文章主要介紹了WinForm實現(xiàn)為ComboBox綁定數(shù)據(jù)源并提供下拉提示功能,是非常實用的功能,需要的朋友可以參考下
    2014-08-08
  • c#方法中調(diào)用參數(shù)的值傳遞方式和引用傳遞方式以及ref與out的區(qū)別深入解析

    c#方法中調(diào)用參數(shù)的值傳遞方式和引用傳遞方式以及ref與out的區(qū)別深入解析

    以下是對c#方法中調(diào)用參數(shù)的值傳遞方式和引用傳遞方式,以及ref與out的區(qū)進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • C#讀取目錄下所有指定類型文件的方法

    C#讀取目錄下所有指定類型文件的方法

    這篇文章主要介紹了C#讀取目錄下所有指定類型文件的方法,可實現(xiàn)讀取目錄下特定后綴名文件的功能,需要的朋友可以參考下
    2015-06-06
  • C#中static的詳細用法實例

    C#中static的詳細用法實例

    在C#中所有方法都必須在一個類的內(nèi)部聲明,然而如果把一個方法或字段聲明為Static,就可以使用類名來調(diào)用方法或訪問字段,下面這篇文章主要給大家介紹了關(guān)于C#中static詳細用法的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • C#實現(xiàn)Dev Grid拖拽移動行的方法

    C#實現(xiàn)Dev Grid拖拽移動行的方法

    這篇文章主要介紹了C#實現(xiàn)Dev Grid拖拽移動行的方法,可實現(xiàn)Dev Grid拖拽移動行的效果,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • WPF實現(xiàn)可視化掃碼器的示例代碼

    WPF實現(xiàn)可視化掃碼器的示例代碼

    AForge.NET 是一個專門為開發(fā)者和研究者基于C#框架設計的,他包括計算機視覺與人工智能,圖像處理,神經(jīng)網(wǎng)絡,遺傳算法,機器學習,模糊系統(tǒng),機器人控制等領域。本文就將用它編寫一個可視化掃碼器,感興趣的可以了解一下
    2022-11-11
  • C#中的命名空間詳解(Namespace)

    C#中的命名空間詳解(Namespace)

    文章介紹了命名空間在C#編程中的作用,包括命名空間的定義與使用、using關(guān)鍵字的使用以及嵌套命名空間的實現(xiàn),通過這些機制,開發(fā)者可以有效地組織和隔離代碼,避免命名沖突,提高代碼的可讀性和可維護性
    2024-12-12
  • C#自定義日志記錄

    C#自定義日志記錄

    這篇文章主要為大家詳細介紹了C#自定義日志記錄的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 詳解c#與js的rsa加密互通

    詳解c#與js的rsa加密互通

    這篇文章主要介紹了詳解c#與js的rsa加密互通,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03

最新評論

新津县| 永安市| 定襄县| 玛曲县| 红桥区| 桦川县| 岳池县| 于都县| 深圳市| 千阳县| 冕宁县| 获嘉县| 方城县| 洞头县| 辽宁省| 健康| 元谋县| 广汉市| 乐东| 长阳| 五华县| 营口市| 旅游| 安宁市| 合肥市| 玛曲县| 沙田区| 个旧市| 溧阳市| 五华县| 恩施市| 德阳市| 望江县| 成都市| 当涂县| 法库县| 额敏县| 锦屏县| 棋牌| 邛崃市| 老河口市|