最近用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

解决方案 »

  1.   

    你点击时干什么了,跟 IsPostBack 有什么关系
      

  2.   

    DataTable dTable = GetShowExtCodeChart(iUserID, this.cBoxWhere.SelectedItem.Value,
                        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,第二次就变成首次加载。