C# 从CSV读取GUI
我一直在使用VS2017将GUI脚本从另一种语言转换为C。我的整个工作大部分都在进行,但出现了一个问题。gui有一个listview,我可以通过在各个字段中输入数据或从CSV导入来手动填充它。手动输入工作正常。CSV导入也可以工作,但是它会将标题行拉入listview。下面是我用于启动导入的按钮的代码:C# 从CSV读取GUI,c#,csv,C#,Csv,我一直在使用VS2017将GUI脚本从另一种语言转换为C。我的整个工作大部分都在进行,但出现了一个问题。gui有一个listview,我可以通过在各个字段中输入数据或从CSV导入来手动填充它。手动输入工作正常。CSV导入也可以工作,但是它会将标题行拉入listview。下面是我用于启动导入的按钮的代码: private void import(object sender, RoutedEventArgs e) { OpenFileDialog xls = new OpenFileDialog
private void import(object sender, RoutedEventArgs e)
{
OpenFileDialog xls = new OpenFileDialog();
xls.Multiselect = false;
xls.Filter = "CSV files (*.csv)|*.csv";
xls.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
xls.ShowDialog();
string ins;
if (xls.FileName != null)
{
FileStream srcFS;
srcFS = new FileStream(xls.FileName, FileMode.Open);
StreamReader srcSR = new StreamReader(srcFS, System.Text.Encoding.Default);
do
{
ins = srcSR.ReadLine();
if (ins != null)
{
string[] parts = ins.Split(',');
MyItems.Add(new MyItem
{
Name = parts[0],
CPU = parts[1],
RAM = parts[2],
IP = parts[3],
Subnet = parts[4],
PortGroup = parts[5],
Gateway = parts[6],
DNS = parts[7],
Description = parts[8],
Template = parts[9],
Host = parts[10],
Site = parts[11],
Folder = parts[12],
Datastore = parts[13],
Patch = parts[14],
HDD1_Size = parts[15],
HDD2_Size = parts[16],
HDD3_Size = parts[17],
HDD4_Size = parts[18],
HDD5_Size = parts[19],
HDD6_Size = parts[20],
HDD7_Size = parts[21],
HDD8_Size = parts[22],
HDD9_Size = parts[23],
HDD10_Size = parts[24]
});
}
} while (ins != null);
srcSR.Close();
}
}
我一直在用谷歌搜索跳过第一行的方法,但大多数建议是逐行迭代,一次写一行,这会减慢导入过程(可能有数百行)。只是想知道是否有一种简单的方法可以告诉StreamReader从何处开始读取文件。您想读取一行并将其丢弃。只需添加一个
ins=srcSR.ReadLine()代码>就在您的do
字符串上方。拆分是解析CSV的一种容易出错的方法,只不过是创建一个字符串数组。你可能想看看诸如CSVHelper之类的工具,它可以读取文件、解析数据并将其存储在一个漂亮的类型集合中。你遇到了比“跳过第一行”更大的问题<代码>拆分(“,”)
不解析CSV文件。使用CSV解析器。DataGridView也更适合UI显示-显示一个只有一行代码且没有数据类型转换的数据源如果我可以的话,你为什么不使用已经存在的东西,比如nuget的CsvHelper,据我回忆,它非常灵活、可靠且易于使用?