C#中Split拆分Excel数据后在ListView横向列显示问题求助
解决ListView横向列显示拆分后字符串的问题
你的核心问题是当前代码每次调用lvName.Items.Add(splitCurrent[j])都会新增一行,导致内容纵向排列。要实现横向按列显示,需确保以下几点并修改代码:
关键前提
- 必须将ListView的
View属性设置为Details(这是显示多列的必要视图模式,可在设计器设置,或代码中指定) - 先添加对应数量的列,再将拆分后的字符串项作为同一行的主项和子项添加
修正后的完整代码
private void btnExcelReader_Click(object sender, EventArgs e) { long lastRow = excelRange.Rows.Count; int rowTotal = 0; for (int i = 1; i < lastRow; i++) { if (excelRange.Cells[i, 1].Value2 != null) { rowTotal++; } } // 关键:设置ListView为Details视图,确保能显示多列 lvName.View = View.Details; // 清空现有内容和列,避免重复 lvName.Columns.Clear(); lvName.Items.Clear(); for (int i = 1; i < rowTotal; i += 4) { char[] separator = new char[] { ' ' }; string current = excelRange.Cells[i, 1].Value2?.ToString(); if (string.IsNullOrEmpty(current)) continue; string[] splitCurrent = current.Split(separator, StringSplitOptions.RemoveEmptyEntries); if (splitCurrent.Length == 0) continue; // 首次处理时,根据拆分后的项数创建对应列 if (lvName.Columns.Count == 0) { for (int col = 0; col < splitCurrent.Length; col++) { lvName.Columns.Add($"列 {col + 1}"); } } // 创建一行数据:第一个项作为主项,其余作为子项(对应后续列) ListViewItem rowItem = new ListViewItem(splitCurrent[0]); for (int j = 1; j < splitCurrent.Length; j++) { rowItem.SubItems.Add(splitCurrent[j]); } // 将整行添加到ListView lvName.Items.Add(rowItem); } lvName.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); lvName.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); }
说明
- 先设置
View = View.Details:这是多列显示的基础,没有这个设置,添加子项也不会显示为列 - 清空列和项:避免重复加载时出现冗余内容
- 创建列:根据第一次拆分得到的项数生成对应列(如果Excel每行拆分后的项数一致,这样就足够;如果不一致,可改为每次处理都检查列数,不足则补充)
- 整行添加:将拆分后的所有项放到同一个
ListViewItem中,主项对应第一列,子项依次对应后续列,这样就能实现横向排列
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

