尝试格式化Datagrid输出的字符串

时间:2012-09-29 17:22:57

标签: c# telerik-grid

嗨我有以下内容根据数据网格中的值在Excel电子表格中创建两个工作表,我能够让它适用于两个数据网格,但是我需要为14个数据网格做这个,这就是我所拥有的到目前为止;

  var grid1Output = RadGridView1.ToExcelML();
  var grid2Output = RadGridView2.ToExcelML().Replace("Worksheet1", "Worksheet2");

  var workBook = grid1Output.Replace("</Worksheet>", "</Worksheet>" + 
       grid2Output.Substring(grid2Output.IndexOf("<Worksheet"), 
       grid2Output.IndexOf("</Worksheet")- grid2Output.IndexOf("<Worksheet")) + "        </Worksheet>");

以上工作正常,但我需要总共进行14次网格输出。我的问题是,我在正确的地方更换字符串时遇到了麻烦。我该怎么做?

1 个答案:

答案 0 :(得分:0)

我可能会使用Linq来处理XML方法而不是字符串操作,但选择权在你手中。

无论哪种方式,编写一个接受网格输出的方法(我假设它是一个字符串),提取内容并返回它们应该不难。然后,调用例程汇编了14个XML字符串,并将它们包装在单个Worksheet标记中。

这是一个刺痛。请记住,我不熟悉RadGridView和ToExcelML的输出,因此如果不进行一些修改,您可能无法使用此代码。我做了一些可能无效的假设。

首先,我将创建一个以XML字符串作为输入的方法。我假设这个字符串完全包含在&lt; Worksheet n &gt;标签

string ExtractWorksheetContents(string excelML, int index)
{
// You might also be able to do this with a regex, depending on how the contents are structured
// Since I don't know enough about the content, I will do this with string manipulation, as
// you did, rather than loading the XML and making assumptions.

    string tagName = string.Format("Worksheet{0}", index);        
    int worksheetStart = excelML.IndexOf("<" + tagName);
    int worksheetEnd = excelML.IndexOf("</" + tagName + ">") + tagName.Length + 3);
    // Should contain some checks that neither w'sheet start nor end are -1
    return excelML.Substring(worksheetStart, worksheetEnd-worksheetStart);
}

然后我会收集结果。我再次假设XML是如何构建的。

StringBuilder sb = new StringBuilder();
sb.Append("<Worksheet>");
RadGridView[] gridViews = new RadGridView[] { RadGridView1, RadGridView2 .... RadGridView14 };
for(int i=0;i<14; i++)
{
    var rgv = gridViews[i];
    sb.Append(ExtractWorksheetContents(rgv.ToExcelML(),i+1));
}
sb.Append("</Worksheet>");
var workBook = sb.ToString();

希望这会有所帮助。