首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WinForms ListView 數據綁定:列寬由 ColumnHeader.Width 決定,行距天然一致

     編輯:程式設計綜合問答

問題現場


for (int i = 0; i < dt.Rows.Count; i++) {
    ListViewItem item = new ListViewItem();
    item.Text = dt.Rows[i]["G_Title"].ToString();
    listView1.Items.Add(item.Text); // 錯誤:Add 接受 string 會新建項,非加入現有 item
    text += item.Text;
}

詢問:「如何顯示項與項之間的間隔是一樣的」。

核心回答

  • 列間距(列寬):由 ColumnHeader.Width 屬性決定。
    listView1.Columns[0].Width = 200; 或設計器屬性設置。
  • 行間距:ListView 天然等高,每行高度由字體、ImageList 圖標大小、ItemHeight(Details 模式下不可直接設)統一計算,**無需額外代碼保證一致**。

代碼修正:正確綁定數據


listView1.View = View.Details;
listView1.Columns.Clear();
listView1.Columns.Add("標題", 300); // 列寬 300px

foreach (DataRow row in dt.Rows) {
    var item = new ListViewItem(row["G_Title"].ToString());
    // 若有多列:item.SubItems.Add(row["Col2"].ToString());
    listView1.Items.Add(item); // 加入 ListViewItem 對象,而非 string
}

進階:虛擬模式應對大數據量

若數據超過數萬行,啟用 listView1.VirtualMode = true,處理 RetrieveVirtualItem 事件按需提供 ListViewItem,極大降低內存佔用與初始化時間。

常見誤區

誤區正確認知
Items.Add(string) 以為加入自建 item該重載會新建一個 ListViewItem,原 item 被忽略,SubItems 丟失
以為需手動計算行高保證一致WinForms ListView 行高由控件統一渲染,天然一致
試圖用 ItemHeight 設置行高僅在 View = List/Tile 時生效,Details 模式無效

結語

ListView 列寬靠 ColumnHeader.Width,行距天然一致。綁定時用 Items.Add(ListViewItem) 而非 Add(string),大數據啟用虛擬模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved