如何在不重新枚举查询结果的情况下将DataGrid数据保存到CSV文件?

时间:2018-03-14 15:12:10

标签: 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 = 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;
    } 

1 个答案:

答案 0 :(得分:1)

我跟着@Clemens建议。我用了

IEnumerable dataList = data.ToList<My_Class>(); 
dataGrid.ItemSource = dataList;
然后我打电话给

exportToCSV(dataList, "\t");

使用dataList作为参数,它工作正常!