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");