C# 如何将DataGrid数据保存到CSV文件,而无需再次枚举查询结果?
我正在使用此命令从查询中获取数据:C# 如何将DataGrid数据保存到CSV文件,而无需再次枚举查询结果?,c#,wpf,csv,datagrid,export-to-csv,C#,Wpf,Csv,Datagrid,Export To Csv,我正在使用此命令从查询中获取数据: private void loadData() { numRows = 0; try { data = gpso.gpEntitiesObject.ExecuteStoreQuery<My_Class>(sql); dataGrid.ItemsSource = data; dataGrid.IsReadOnly = t
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;
}
}
private void loadData()
{
numRows=0;
尝试
{
data=gpso.gpEntitiesObject.ExecuteStoreQuery(sql);
dataGrid.ItemsSource=数据;
dataGrid.IsReadOnly=true;
numRows=dataGrid.Items.Count;
numRowsTB.Text=“行数:”+numRows;
}
捕获(例外情况除外)
{
statusBarTB.Text=“异常:”+ex.消息;
}
}
虽然这可以工作,并且我在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;
}
public静态字符串exportToCSV(IEnumerable数据,字符串分隔符)
{
字符串ishod=“”;
字符串csvRed=“”;
ishod+=“键1”+分隔符+“键2”+分隔符;
ishod+=“键3”+分隔符+“键4”+分隔符;
ishod+=“\n”;
foreach(数据中的My_类项)
{
csvRed+=项.键1+分隔符+项.键2+分隔符;
csvRed+=项.键3+分隔符+项.键4+分隔符;
csvRed+=“\n”;
ishod+=csvRed;
csvRed=“”;
}
返回ishod;
}
我听从了@Clemens的建议。我曾经
IEnumerable dataList = data.ToList<My_Class>();
dataGrid.ItemSource = dataList;
使用dataList作为参数,它工作了 也许
dataGrid.ItemsSource=data.ToList()
@Clemens-hmm,试图使用ToList(),但我得到了相同的错误。问题可能是我在exportCSV()函数中再次遍历了所有行。嗯,一定有更好的方法。当然是使用foreach(dataGrid.ItemsSource中的My_Class项)
。或者将data.ToList()
分配给另一个字段。@Clemens是的,谢谢。我创建了新变量IEnumerable dataList=data.ToList();我现在设置为dataGrid.ItemSource=dataList,并将其发送到csv导出函数。它起作用了!:)
exportToCSV(dataList, "\t");