gridview局部刷新。由于Gridview某列存在复杂的逻辑计算(没办法去优化了)很耗费时间,想先把这列先用一个加载图片替换,使之能快速加载Gridview。等整个页面加载完成以后再逐一加载这一列的值。
把那一列的每一行用一个小img代替,然后每个图片调用img的onload事件
img.onload = function () {
//调用ajax方法取数据(图片id或name什么的做参数)
}
谷歌浏览器应该没问题,ie的话你试试吧
gridview加载完,怎么逐一调用img的onload事件
点击gridview分页的时候特别慢
@搁置: img的onload事件是浏览器加载的 不用你去调用
@捂汗:
function ImgCheck(e){
var id= e.name;
$.getJSON("View.aspx", { "mode":"1", "key": escape(id),rd: Math.random() }, function(msg) {
count = msg.Table.length;
$.each(msg.Table, function (i, j) {
var name1=j.UserRoleDetail;
$("#"+id).val(name1);
e.style.display="none";
$("#" + id).show();
})
})
}
<ItemTemplate>
<img src="Img/jdt.gif" style="width: 14PX; height: 14px" id="imgid" name='<%# Eval("ID").ToString()%>'
onload="ImgCheck(this);" />
<input type="text" id='<%# Eval("ID").ToString()%>' style="display: none" />
</ItemTemplate>
为什么 分页的时候很慢很慢
@搁置: 怎么个慢法?数据出来的慢?服务器响应慢?有多慢?
@捂汗: 服务器响应慢 。
public SqlHelper sp = new SqlHelper();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
InitBind();
}
if (Request["mode"] == "1")
{
string id = Server.UrlDecode(Request["key"].ToString()).ToString();
string sql1 = "select UserRoleDetail from SET_User_Role where ID='" + id + "'";
DataSet ds = sp.getDs(sql1, CommandType.Text, null, null);
int cont = 0;
for (int i = 0; i < 100000; i++)
{
for (int j = 0; j < 1000; j++)
{
cont += i + j;
}
}
Response.Write(SinglePropertyStateDataSetToJson(ds, true));
Response.End();
}
}
@搁置: img的load事件在chrome浏览器是等页面load以后才执行的,所以那一列的数据肯定是等页面展现完成以后才开始取数据然后一个一个出来的,ie的话应该是执行到图片那儿就去取数据了。不知道你说的慢是不是图片那一列出来的比较晚?
@捂汗: 可能是吧。在IE里面点分页的时候整个Gridview 出来的比较晚。用chrome浏览器GridView出来的很快,然后一个个刷数据。请问有什么方法解决吗?
@搁置: 你不就是希望gridview先出来,然后那列比较复杂的数据后出来么?
@捂汗: 是啊,可是在IE里面点击分页的时候GridView出来很慢。先img加载事件执行一遍,然后再加载那一列的数据等于加载了2遍那列比较复杂的数据
@搁置: 这个。。。ie的话当初我就想到可能有问题,你可以判定一下浏览器类型,如果是ie的话就做另外一种处理。但是chrome的情况是你希望看到的是吗?
@捂汗: 嗯,要chrome这样的。
@捂汗: 怎么能在IE里面达到chrome这样的效果
@搁置: 你在图片load的时候用ajax的异步方法,还会影响gridview的展示?
@捂汗: 嗯,我那代码都在上面。 第一页不影响,点击分页的时候会有影响。在IE里面点击Gridview 下一页很慢(可能它去执行图片load事件了)在chrome里点击gridview很快。
@搁置: 可以了 是IE中IMG的onload事件重复执行的问题 加一个 e.onload=null;就行了
@搁置: 哦,这样啊 =_=!!!
页面加载完成后 用ajax 方式取数据 加更新。
AJAX获取数据怎么绑定到Gridview 那一列。
@搁置: 在那一列你可以根据每一行中的id,或其它标志取到,理更新。
Ajax运算。2楼的方法挺好的~~~