我试图将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中的指定值时,这显示我是红线。
希望您能尽快帮助我,谢谢
答案 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;
}
}