如何从WPF中的DataGrid将数据导出到字符串

时间:2019-06-09 20:50:13

标签: c# wpf

我试图将datagrid数据导出到c#wpf中的字符串。我该怎么办?

我尝试了一些代码,现在显示给他们

string stOutput = "";
// Export titles:
string sHeaders = "";

for (int j = 0; j < Equipment_Request.Columns.Count; j++)
    sHeaders = sHeaders.ToString() +  
        Convert.ToString(Equipment_Request.Columns[j].HeaderText) + "\t";
stOutput += sHeaders + "\r\n";

// Export data.
for (int i = 0; i < Equipment_Request.RowCount - 1; i++)
{
    string stLine = "";
    for (int j = 0; j < Equipment_Request.Rows[i].Cells.Count; j++)
        stLine = stLine.ToString() +  
           Convert.ToString(Equipment_Request.Rows[i].Cells[j].Value) + "\t";
    stOutput += stLine + "\r\n";
}

当我尝试获取for中的指定值时,这显示我是红线。

希望您能尽快帮助我,谢谢

1 个答案:

答案 0 :(得分:0)

根据您的注释,DataGrid中的每个项目都是一个Product元素,您可以从ItemsSource属性中检索它。

您可以通过这种方式重写逻辑

string headers = "";
List<string> data = new List<string>();

headers = string.Join("\t", Equipment_Request.Columns.Select(x => x.HeaderText));

foreach(ProductR p in Equipment_Request.ItemsSource)
{
    data.Add(p.ToString());
}
string output = headers + "r\n" + string.Join(data, "\r\n");

如您所见,这很容易理解。我们将信息存储在字符串列表中,然后将各个元素连接到具有所需分隔符的单个字符串中。这也会删除字符串中显示的最终标签,而不是要导出的实际值。

另一个关键更改是您需要添加到Product类的ToString方法的替代。覆盖有助于创建单个产品实例的字符串表示形式,例如

public class ProductR
{

     .....

     public override string ToString()
     {
         return this.ID + "\t" + 
                this.Product + "\t" + 
                this.Unit + "\t" + 
                this.Amount;
     }
}