0

我正在我的 ASP.NET WebForms 应用程序中创建一些图表,并在我的应用程序中创建图表,对于图表的数据,我必须为数据表(在 javascript 中)编写字符串,例如:

var data = new google.visualization.DataTable();
data.addColumn('date', 'Date');
data.addColumn('number', 'Sold Pencils');
data.addColumn('string', 'title1');
data.addColumn('string', 'text1');
data.addColumn('number', 'Sold Pens');
data.addColumn('string', 'title2');
data.addColumn('string', 'text2');
data.addRows([
  [new Date(2008, 1 ,1), 30000, null, null, 40645, null, null],
  [new Date(2008, 1 ,2), 14045, null, null, 20374, null, null],
  [new Date(2008, 1 ,3), 55022, null, null, 50766, null, null],
  [new Date(2008, 1 ,4), 75284, null, null, 14334, 'Out of Stock', 'Ran out of stock on pens at 4pm'],
  [new Date(2008, 1 ,5), 41476, 'Bought Pens', 'Bought 200k pens', 66467, null, null],
  [new Date(2008, 1 ,6), 33322, null, null, 39463, null, null]
]);

我正在使用 SqlDataReaders 来执行此操作,创建此脏代码:

string jsGraph = "";
jsGraph += "data.addRows([";
            while (dsChartsData.Read())
            {
                var d = (DateTime)dsChartsData["dateColumn"];
                jsGraph += "[new Date(" + d.Year.ToString() + ", " + d.Month.ToString() + ", " + d.Day.ToString() + "), " + dsChartsData["value1"].ToString() + ", null, null, " + dsChartsData["value3"].ToString() + ", null, null],";
            }
jsGraph += "]);"

有没有什么方法可以做到这一点更易于维护,代码简洁且易于调试?(.cs 文件中的 javascript 在我的代码中是一团糟,数以百万计的连接和东西)

Obs:目前我正在使用 webForms,但是如果你们中的一些人在使用 MVC 时有很大的优势,请告诉我,也许我可以在 MVC 中创建页面来渲染图表(当然,在学习之后)。

4

1 回答 1

1

首先,您缺少,javascript 数组中的分隔逗号...

其次,为什么会有这么多的串联?为什么不是公共变量并从 javascript 调用它?

像:

public string graphData = "";

在你的方法中:

StringBuilder jsGraph = new StringBuilder();
jsGraph.AppendLine("[");

while (dsChartsData.Read())
{
    var d = (DateTime)dsChartsData["dateColumn"];
    jsGraph.AppendLine("[new Date(" + d.Year.ToString() + ", " + d.Month.ToString() + ", " + d.Day.ToString() + "), " + dsChartsData["value1"].ToString() + ", null, null, " + dsChartsData["value3"].ToString() + ", null, null],");
}
jsGraph.AppendLine("]");

graphData = jsGraph.ToString();

并在您的 Javascript 中:

var graphData = <%= graphData %>;
...    
data.addRows(graphData);

顺便说一句,你的大串联应该写成:

jsGraph.AppendFormat(
            "[new Date({0:yyyy, M, d}), {1}, null, null, {2}, null, null],", 
              (DateTime)dsChartsData["dateColumn"], 
              dsChartsData["value1"],
              dsChartsData["value3"]);

女巫可以更容易阅读。

于 2012-04-25T18:14:37.067 回答