C#如何将List<string>内容按规则添加到多列ListView控件中
实现List分组绑定ListView的解决方案
前置准备
确保你的ListView控件已完成基础配置:
- View属性设置为
View.Details - 已提前添加4个列头,列顺序对应:协议、本地地址、远程地址、状态
代码实现
基础循环实现(无需额外依赖)
// 假设你的netstat解析结果存储在 List<string> netstatList 中 listView1.Items.Clear(); // 批量更新禁用界面重绘,提升加载效率 listView1.BeginUpdate(); // 每5个元素为一组遍历 for (int i = 0; i < netstatList.Count; i += 5) { // 跳过不足5个元素的不完整分组 if (i + 4 >= netstatList.Count) break; // 提取对应字段,Trim处理掉多余空白字符 string protocol = netstatList[i].Trim(); string localAddress = netstatList[i + 1].Trim(); string remoteAddress = netstatList[i + 2].Trim(); string status = netstatList[i + 3].Trim(); // 第5位为PID,如需展示可新增第5列后添加:string pid = netstatList[i+4].Trim(); // 构造ListView行 ListViewItem row = new ListViewItem(protocol); row.SubItems.Add(localAddress); row.SubItems.Add(remoteAddress); row.SubItems.Add(status); // 新增PID列后添加:row.SubItems.Add(pid); listView1.Items.Add(row); } listView1.EndUpdate();
LINQ分组实现(语法更简洁)
using System.Linq; // ...其他逻辑 listView1.Items.Clear(); listView1.BeginUpdate(); // 按每5个元素分组 var connectionGroups = netstatList .Select((value, index) => new { value, index }) .GroupBy(item => item.index / 5) .Where(group => group.Count() == 5); // 过滤不完整分组 foreach (var group in connectionGroups) { var fields = group.Select(item => item.value.Trim()).ToList(); ListViewItem row = new ListViewItem(fields[0]); row.SubItems.Add(fields[1]); row.SubItems.Add(fields[2]); row.SubItems.Add(fields[3]); listView1.Items.Add(row); } listView1.EndUpdate();
内容的提问来源于stack exchange,提问作者cipher_449449
相关产品推荐
相关产品推荐

