private bool BindData()
{
System.DateTime dt=System.DateTime.Now;
bool bSuccess=false;
int deptcount=sDepartmentName.Length;
int rowcount=ds_data.Tables["makecharge"].Rows.Count;
string sSubject=string.Empty;//科目
decimal dDepTotal=0;
string sBg=string.Empty;//
decimal dAllTotal=0;
decimal dAttribive=0;
decimal dUnAttribive=0;
           
if (deptcount<1)
{
this.body.InnerHtml="<font class=fontstyle1>『根據您選擇的條件系統沒有找到任何數據!』</font>";
bSuccess=true;
                return bSuccess;
}
//add table head
str_body="<table cellspacing=0 cellpadding=4 width=100% bordercolor=Olive rules=cols border=1 style=border-color:Olive;border-width:1px;border-style:solid;height:30px;width:100%;border-collapse:collapse;font-family:Verdana;font-size:8pt;>";
            str_body+="<tr><td colspan="+Convert.ToString(deptcount*3+2)+" align=center style=border-bottom:0px;><font class=fontstyle1>ETC責任利潤中心制費明細表</font></td></tr>";
            str_body+="<tr><td colspan="+Convert.ToString(deptcount*3+2)+" align=center style=border-bottom:0px;><b>"+this.ddl_year.SelectedItem.Text+"年"+this.ddl_month.SelectedItem.Text+"月</b></td></tr>"; //Caption
str_body+="<tr><td rowspan=2 valign=center widht=212px align=center style="+"\""+"border-top:solid 1px Olive;border-bottom:solid 1px Olive;"+"\""+">科  目</td>";
for(int i=0;i<deptcount;i++)
{
str_body+="<td colspan=3 align=center bgcolor=ivory style="+"\""+"color:#7B8C9C;border-top:solid 1px Olive;border-bottom:solid 1px Olive;"+"\""+"><b>"+sDepartmentName[i].ToString()+"</b></td>";
            }
str_body+="<td rowspan=2 valign=center align=center style="+"\""+"border-top:solid 1px Olive;border-bottom:solid 1px Olive;"+"\""+">合  計</td></tr><tr>";
for(int i=0;i<deptcount;i++)
{
str_body+="<td align=center style="+"\""+"border-bottom:solid 1px Olive;"+"\""+"width=123px>可歸檔</td><td align=center style="+"\""+"border-bottom:solid 1px Olive;"+"\""+"width=123px>不可歸檔</td><td align=center style="+"\""+"border-bottom:solid 1px Olive;"+"\""+"width=123px>小 計</td>";
}
str_body+="</tr>"; //add table data
for(int i=0;i<rowcount;i++)
{
dDepTotal=Convert.ToDecimal((ds_data.Tables["makecharge"].Rows[i]["all_total"].ToString()==""?"0":ds_data.Tables["makecharge"].Rows[i]["all_total"].ToString()));
dAllTotal+=dDepTotal;
sSubject=ds_data.Tables["makecharge"].Rows[i]["account_nm"].ToString();
if (i%2==0)
{
sBg="bgcolor=#efebde";
}
else
{
sBg="";
}
str_body+="<tr "+sBg+"><td width=212px>"+sSubject+"</td>"; for(int j=2;j<deptcount*3;j=j+3)///////////////////////加入對應部門資料
{
dAttribive=Convert.ToDecimal((ds_data.Tables["makecharge"].Rows[i][j].ToString()==""?"0":ds_data.Tables["makecharge"].Rows[i][j].ToString()));
dUnAttribive=Convert.ToDecimal((ds_data.Tables["makecharge"].Rows[i][j+1].ToString()==""?"0":ds_data.Tables["makecharge"].Rows[i][j+1].ToString()));
dDepTotal=Convert.ToDecimal((ds_data.Tables["makecharge"].Rows[i][j+2].ToString()==""?"0":ds_data.Tables["makecharge"].Rows[i][j+2].ToString()));
str_body+="<td align=right width=123px>&nbsp;"+dAttribive.ToString("¥#,##0.00");
str_body+="</td><td align=right width=123px>&nbsp;"+dUnAttribive.ToString("¥#,##0.00");
str_body+="</td><td align=right width=123px>&nbsp;"+dDepTotal.ToString("¥#,##0.00")+"</td>";
}
str_body+="<td align=right><b>&nbsp;"+Convert.ToDecimal(ds_data.Tables["makecharge"].Rows[i]["all_total"].ToString()==""?"0":ds_data.Tables["makecharge"].Rows[i]["all_total"].ToString()).ToString("¥#,##0.00")+"</b></td>";
str_body+="</tr>";
}          //add cost total
str_body+="<tr><td width=212px align=center style="+"\""+"border-top:solid 1px Olive;"+"\""+">費用合計:</td>";
for(int i=0;i<deptcount*3;i++)
{
str_body+="<td align=right style="+"\""+"border-top:solid 1px Olive;"+"\""+"><b>"+Convert.ToDecimal(sDepartmentTotal[i]==""?"0":sDepartmentTotal[i]).ToString("¥#,##0.00")+"</b></td>";
}
str_body+="<td align=right style="+"\""+"border-top:solid 1px Olive;"+"\""+"><b>&nbsp;"+dAllTotal.ToString("¥#,##0.00")+"</b></td></tr>";//合計
str_body+="</table>"; int ss=(int)(DateTime.Now-dt).TotalMilliseconds;
this.body.InnerHtml=str_body;
為什麼才400多條記錄就用了40多秒啊,望高人指點一二。

解决方案 »

  1.   

    你直接加载一个表??用select分页,加索引
      

  2.   

    這裡我必須在後台通過這種方法綁定數據才能很好的控制格式,再說那個取到的表是一個組合起來的,很復雜,用DATAGRID根本實現不了
      

  3.   

    你把所有的数据都加载到一个table里面啦,想一下,一个table里面400多行页面加载慢很正常啊,把每个tr放到table里面吧,页面应该会快不少,至少是一部分一部分出来,不会是白页面
      

  4.   

    问题出在str_body,你定义的str_body是一个字符串类型,在每次增加字符串内容时用的是str_body+=这种方法会在内存中重新创建一个string实例并进行字符串的连接。你每用一次str_body+=都会在内存中重新创建新的string实例,你可以使用System.Text.StringBuilder来解决这个问题。用StringBuilder.Append(string)方法追加字符串,完成后用StringBuilder.ToString()转换成字符串。