我希望能够在列表视图中看到不同的CSV文件(不能同时看到)。 CSV文件具有不同的列。
我已经在GeneralLogic.cs类中编写了此方法:
public void readCSV(string filename, MainWindow mw)
{
connectToDBLogic();
using (StreamReader reader = new StreamReader(filename, Encoding.Default))
{
reader.ReadLine();
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
string[] values = line.Split(';');
}
}
}
这是我的MainWindow方法:
private void btnShowCSVClicked(object sender, RoutedEventArgs e)
{
gl.readCSV(fileNameBox.Text, this);
}
但是我必须添加什么,该表显示在列表视图中?我称它为listViewTable。
感谢帮助:)
答案 0 :(得分:0)
您需要将ItemsSource
的{{1}}属性设置为您的ListView
方法返回的结果。当前,该方法不返回任何值。
将readCSV
更改为public void readCSV
。
然后,您需要将public List<string[]> readCSV
的列绑定到ListView
的{{1}}中的字段
答案 1 :(得分:0)
目前,您的readCSV
不返回任何内容。也许它可以返回保存在文件中的对象列表。然后bind it到ListView。
public void readCSV(string filename, MainWindow mw)
{
var result = File.ReadAllLines(filename)
.Select(line => line.Split(';'))
.Select(x => new MyObject {
prop1 = x[0],
prop2 = x[1],
//etc..
})
return result;
}
或将结果绑定到列表,如myListView.ItemsSource =
。
但是这种没有外部解析器的方法将无法处理错误,格式错误的csv等。但是使用简单的lib却是微不足道的。
映射信息:
public class MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedDate { get; set; }
}
public sealed class MyClassMap : ClassMap<MyClass>
{
public MyClassMap()
{
AutoMap();
Map( m => m.CreatedDate ).Ignore();
}
}
您可以像这样使用它:
var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>();
示例和代码格式CsvHelper
绑定到列表视图很简单。
// Assign the source
myListView.ItemsSource = gl.ReadCSV();
// Add to existing items
myListView.Items.AddRange(gl.ReadCSV());