日期:2014-05-19  浏览次数:20705 次

菜鸟求个问题,希望老鸟们进来看看
C#网页程序:

1、
我写了个类来方便读取数据库中的数据,根据我传入的sql语句就返回一个DataTable类型的数据,数据就存放在里面,然后就DataBind到指定的控件。数据返回后,在类中conn连接数据库的之类的,都是Close了的,但是在显示网业的时候,随着我读的数据越多

<input   type= "hidden "   name= "__VIEWSTATE "   id= "__VIEWSTATE "   value= "xxxxx "
这个后面的数据也跟着越多,请问我要如何做,这个才有很少的内容??

2、比如我的数据库中有如下字段:compname,istop。
取10条记录进行读出来,我想在网页显示数据的时候,根据,istop是否为1来在后面显示一个为 "new "   的图片,这个istop我不知道怎么在aspx的 <%%> 标签中读出来。

我现在用的方法是,先在返回的DataTable中增加一列,比如为topimg;然后扫描DataTable.Row,如果发现istop=1的话,就把新增的topimg字段值设置为 <img   src=new.jpg>   否则就设置为空,然后就在网页中用: <%#DataBinder.Eval(Container.DataItem,   "topimg ")   %> 显示字段内容

但是我觉得这样做多扫描了一次DataTable,因为在Bind数据的时候肯定是要再扫描一次的,请问有没有好的方法呢???

谢谢各位的

------解决方案--------------------
1.界面上需要维护的控件的状态信息越多,这个 <input type= "hidden " name= "__VIEWSTATE " id= "__VIEWSTATE " value= "xxxxx "> 这个后面的数据也跟着越多 你可以禁用页面或者某些控件的ViewState

2.类似如下的方法
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DataRowView row;
Image i;

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
row = (DataRowView)e.Item.DataItem;
if (Convert.ToInt32(row[ "istop "]) == 1)
{
i = (Image)e.Item.FindControl( "Image1 ");
if(i != null)
{
i.ImageUrl = "new.jpg ";
i.Visible = true;
}
else
{
i.Visible = false;
}
}
}
}