最近用EXT做东西,现在发现一个非常奇怪的问题.我的页面上有个EXT按钮,点击按钮之后遍历一个DataTable生成XML格式的数据(报表用),第一次点击的非常正常,也可以显示报表,当第二次点击的时候:IsPostBack 成了false;变成了首次加载页面了。 生成XML的时候也不会报错,过程哪里都不会报错. 我原以为是我别的地方写错,找了好久都没找到,最后把遍历DataTable的方法给注释掉之后,变成个空方法就不会重新加载了。代码如下: public static string GetDataByFusion(string sTitle, string sXAxis, DataTable dtData)
{
string strXML = string.Empty, strCategories = string.Empty, strYGraphs = string.Empty; try
{
if (dtData.Rows.Count > 0)
{
strXML = string.Format("<graph subCaption=' ' caption='{0}' baseFont='宋体' baseFontSize='12' chartLeftMargin='30'"
+ " chartRightMargin='35' majorTMNumber='10' minorTMNumber='4' minorTMHeight='-4' majorTMHeight='-8' "
+ " rotateNames='0' showValues='1' formatNumberScale='0'>", sTitle); Dictionary<string, string> dictItem = new Dictionary<string, string>(); foreach (DataRow dRow in dtData.Rows)
{
strCategories += string.Format("<category label='[{0}:{1}]' />",
GetColumnName(sXAxis), dRow[sXAxis].ToString()); for (int i = 1; i < dtData.Columns.Count; i++)
{
if (dictItem.ContainsKey(dtData.Columns[i].ColumnName))
{
dictItem[dtData.Columns[i].ColumnName] += string.Format("<set value='{0}' />", dRow[dtData.Columns[i].ColumnName].ToString());
}
else
{
dictItem.Add(dtData.Columns[i].ColumnName, string.Format("<set value='{0}' />", dRow[dtData.Columns[i].ColumnName].ToString()));
}
}
} foreach (string key in dictItem.Keys)
{
strYGraphs += string.Format("<dataset seriesName='{0}' renderAs='line' >{1}</dataset>", GetColumnName(key), dictItem[key]);
} strXML += string.Format("<categories>{0}</categories>{1}</graph>", strCategories, strYGraphs); dtData.Dispose(); JYAD.CommUtility.WriteLog.WriteInfo("Chart", strXML);
}
}
catch (Exception ex)
{
JYAD.CommUtility.WriteLog.WriteInfo("Chart", ex.ToString());
} return strXML;
} private static string GetColumnName(string sColumnName)
{
string sName = string.Empty; switch (sColumnName)
{
case "STNAME":
sName = "日期";
break;
case "CALLCOUNT":
sName = "次数";
break;
case "CALLOK":
sName = "成功率";
break;
case "KEYHITS":
sName = "点击数";
break;
default:
break;
} return sName;
}
好奇怪的问题,为何遍历一下DataTable就造成第二次点击时就成了首次加载了??? 在线急等. 3Q
{
string strXML = string.Empty, strCategories = string.Empty, strYGraphs = string.Empty; try
{
if (dtData.Rows.Count > 0)
{
strXML = string.Format("<graph subCaption=' ' caption='{0}' baseFont='宋体' baseFontSize='12' chartLeftMargin='30'"
+ " chartRightMargin='35' majorTMNumber='10' minorTMNumber='4' minorTMHeight='-4' majorTMHeight='-8' "
+ " rotateNames='0' showValues='1' formatNumberScale='0'>", sTitle); Dictionary<string, string> dictItem = new Dictionary<string, string>(); foreach (DataRow dRow in dtData.Rows)
{
strCategories += string.Format("<category label='[{0}:{1}]' />",
GetColumnName(sXAxis), dRow[sXAxis].ToString()); for (int i = 1; i < dtData.Columns.Count; i++)
{
if (dictItem.ContainsKey(dtData.Columns[i].ColumnName))
{
dictItem[dtData.Columns[i].ColumnName] += string.Format("<set value='{0}' />", dRow[dtData.Columns[i].ColumnName].ToString());
}
else
{
dictItem.Add(dtData.Columns[i].ColumnName, string.Format("<set value='{0}' />", dRow[dtData.Columns[i].ColumnName].ToString()));
}
}
} foreach (string key in dictItem.Keys)
{
strYGraphs += string.Format("<dataset seriesName='{0}' renderAs='line' >{1}</dataset>", GetColumnName(key), dictItem[key]);
} strXML += string.Format("<categories>{0}</categories>{1}</graph>", strCategories, strYGraphs); dtData.Dispose(); JYAD.CommUtility.WriteLog.WriteInfo("Chart", strXML);
}
}
catch (Exception ex)
{
JYAD.CommUtility.WriteLog.WriteInfo("Chart", ex.ToString());
} return strXML;
} private static string GetColumnName(string sColumnName)
{
string sName = string.Empty; switch (sColumnName)
{
case "STNAME":
sName = "日期";
break;
case "CALLCOUNT":
sName = "次数";
break;
case "CALLOK":
sName = "成功率";
break;
case "KEYHITS":
sName = "点击数";
break;
default:
break;
} return sName;
}
好奇怪的问题,为何遍历一下DataTable就造成第二次点击时就成了首次加载了??? 在线急等. 3Q
this.txtNumber.Text, Convert.ToDateTime(this.dfStart.Value), Convert.ToDateTime(this.dfEnd.Value)); this.hideXML.Text = CreateChart.GetDataByFusion("点击量、通话量统计", "STNAME", dTable);
X.Js.AddScript("ShowChart();"); this.WinChartBar.Show();
点击时的操作,其实就是获取数据,然后遍历下DataTable,返回一个XML格式的字符串,就这么个事,第一次OK,第二次就变成首次加载。