如何在不再次枚举查询结果的情况下将DataGrid数据保存到CSV文件?
How to save DataGrid data to CSV file without enumerating the query result again?
我正在使用此命令从我的查询中获取数据:
private void loadData()
{
numRows = 0;
try
{
data = gpso.gpEntitiesObject.ExecuteStoreQuery<My_Class>(sql);
dataGrid.ItemsSource = data;
dataGrid.IsReadOnly = true;
numRows = dataGrid.Items.Count;
numRowsTB.Text = "Number of rows: " + numRows;
}
catch (Exception ex)
{
statusBarTB.Text = "exception: " + ex.Message;
}
}
虽然这有效并且我在我的 DataGrid 中看到了数据,但我无法将数据保存到 CSV 文件,因为我试图再次重新枚举查询结果,这是不允许的。
获取数据并将其保存为 CSV 的正确方法是什么?
我应该使用 DataGrid API 滚动浏览行并在 foreach() 循环中获取数据吗?
这是我的 CSV 函数:
public static string exportToCSV(IEnumerable<My_Class> data, string separator)
{
string ishod = "";
string csvRed = "";
ishod += "Key1" + separator + "Key2" + separator;
ishod += "Key3" + separator + "Key4" + separator;
ishod += "\n";
foreach (My_Class item in data)
{
csvRed += item.Key1+ separator + item.Key2+ separator;
csvRed += item.Key3+ separator + item.Key4+ separator;
csvRed += "\n";
ishod += csvRed;
csvRed = "";
}
return ishod;
}
我听从了@Clemens 的建议。我用了
IEnumerable dataList = data.ToList<My_Class>();
dataGrid.ItemSource = dataList;
然后我打电话给
exportToCSV(dataList, "\t");
使用 dataList 作为参数并且成功了!
我正在使用此命令从我的查询中获取数据:
private void loadData()
{
numRows = 0;
try
{
data = gpso.gpEntitiesObject.ExecuteStoreQuery<My_Class>(sql);
dataGrid.ItemsSource = data;
dataGrid.IsReadOnly = true;
numRows = dataGrid.Items.Count;
numRowsTB.Text = "Number of rows: " + numRows;
}
catch (Exception ex)
{
statusBarTB.Text = "exception: " + ex.Message;
}
}
虽然这有效并且我在我的 DataGrid 中看到了数据,但我无法将数据保存到 CSV 文件,因为我试图再次重新枚举查询结果,这是不允许的。
获取数据并将其保存为 CSV 的正确方法是什么? 我应该使用 DataGrid API 滚动浏览行并在 foreach() 循环中获取数据吗?
这是我的 CSV 函数:
public static string exportToCSV(IEnumerable<My_Class> data, string separator)
{
string ishod = "";
string csvRed = "";
ishod += "Key1" + separator + "Key2" + separator;
ishod += "Key3" + separator + "Key4" + separator;
ishod += "\n";
foreach (My_Class item in data)
{
csvRed += item.Key1+ separator + item.Key2+ separator;
csvRed += item.Key3+ separator + item.Key4+ separator;
csvRed += "\n";
ishod += csvRed;
csvRed = "";
}
return ishod;
}
我听从了@Clemens 的建议。我用了
IEnumerable dataList = data.ToList<My_Class>();
dataGrid.ItemSource = dataList;
然后我打电话给
exportToCSV(dataList, "\t");
使用 dataList 作为参数并且成功了!