将.csv导入c#中的ListView会复制第一个条目。
原始csv文件: Original file image
我得到了什么: Visual Studio Error
我正在尝试将.csv上传到列表中,因此如果所有内容都正确验证,表格会填充,然后我会将该数据传递到我的数据库。
private void btn_Cargar_Click(object sender, EventArgs e)
//button load .csv file click
{
list_Previ.Items.Clear();
filepath = "";
txtbox_ArchivoCargado.Text = "";
cargarCSV();
}
private void cargarCSV() //Load .csv
{
OpenFileDialog dialogoCargar = new OpenFileDialog();
dialogoCargar.Filter = "Archivos CSV|*.csv";
dialogoCargar.FilterIndex = 1;
if(dialogoCargar.ShowDialog() == DialogResult.OK)
{
filepath = dialogoCargar.FileName;
txtbox_ArchivoCargado.Text = filepath;
}
}
private void btn_Validame_Click(object sender, EventArgs e) //Validate Button Click
{
if(filepath == "") MessageBox.Show("No hay nada que validar\nPuedes empezar cargando un archivo", "Corporativo Acosta | Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
if(filepath != "")
{
Validar();
}
}
private void Validar() //Validate
{
empleadosValido = true;
try {
FileStream fileStreamNew = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite);
StreamReader streamRead = new StreamReader(fileStreamNew);
string strView = streamRead.ReadToEnd();
streamRead.Close();
fileStreamNew.Close();
String[] strArray = strView.Split(new char[] { ',' });
ListViewItem item = new ListViewItem(strArray[0].ToString());
item.SubItems.Add(strArray[0].ToString());
item.SubItems.Add(strArray[1].ToString());
item.SubItems.Add(strArray[2].ToString());
item.SubItems.Add(strArray[3].ToString());
item.SubItems.Add(strArray[4].ToString());
item.SubItems.Add(strArray[5].ToString());
item.SubItems.Add(strArray[6].ToString());
list_Previ.Items.Add(item);
}
catch (Exception ex)
{
if (ex is IOException)
{
MessageBox.Show("El archivo se encuentra en uso por otro programa\nPor favor cierra otros programas e intenta de nuevo.", "Corporativo Acosta | Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
empleadosError = true;
MessageBox.Show(ex.ToString());
}
if (ex is IndexOutOfRangeException)
{
MessageBox.Show("Hay un problema con tus columnas.\nVerifica que correspondan las columnas a importar\ncon las de la tabla (7 columnas)", "Corporativo Acosta | Error", MessageBoxButtons.OK ,MessageBoxIcon.Error);
empleadosError = true;
MessageBox.Show(ex.ToString());
}
}
}
答案 0 :(得分:3)
我怀疑这是问题所在:
ListViewItem item = new ListViewItem(strArray[0].ToString());
item.SubItems.Add(strArray[0].ToString());
您将第一个值添加两次,一次作为" main"项目和一次作为子项目。尝试删除第二行。
来自View.Details
文档:
每个项目都显示在一个单独的行中,其中包含有关按列排列的每个项目的更多信息。最左侧的列包含一个小图标和标签,后续列包含应用程序指定的子项。列显示可以显示列标题的标题。用户可以在运行时调整每列的大小。
这听起来像是问题 - 第一个显示的列显示了传递给ListViewItem
构造函数的值。
顺便说一下,你已经有了一个字符串数组,所以你不需要所有ToString
次调用:
ListViewItem item = new ListViewItem(strArray[0]);
item.SubItems.Add(strArray[1]);
item.SubItems.Add(strArray[2]);
item.SubItems.Add(strArray[3]);
item.SubItems.Add(strArray[4]);
item.SubItems.Add(strArray[5]);
item.SubItems.Add(strArray[6]);
或使用对象初始值设定项:
ListViewItem item = new ListViewItem(strArray[0])
{
SubItems = { strArray[1], strArray[2], strArray[3],
strArray[6], strArray[5], strArray[6] };
};