2

我想做的事:

我想实现一个gridview,用户可以在其中选择行并将所选行中单元格的文本显示在要编辑的页面上的多个文本框中。我还希望根据所选行中的文本更新图像。

我现在是怎么做的:

目前,我正在使用在此处找到的自定义可点击 gridview 控件。本质上,自定义控件会在单击行中的任意位置时导致回发,并提供一个“OnRowClicked”事件,我可以附加一个事件处理函数。在这个函数中,我将 rowindex 保存在视图状态中,然后使用如下代码:

protected void GridViewClicked(object sender, GridViewRowClickedEventArgs e){
    TextBox1.Text = System.Net.WebUtility.HtmlDecode(e.Row.Cells[0].Text);
}

在文本框和代码中填充文本,如:

string filepath = "~/Bitmaps/" + TextBox1.Text + ".bmp";
    if (File.Exists(Server.MapPath(filepath)))
    {
        bitmap.ImageUrl = filepath;
    }
    else
    {
        bitmap.ImageUrl = "~/Bitmaps/NoImage.bmp";
    }

根据单击的行更新我网页上的图像(最大大小 500kb)。

所以有什么问题?

好吧,一切都在正常运行。但是,问题是每次单击行在鼠标单击发生和字段/图像更新(约 0.5 秒)之间都有明显的延迟,这很烦人。但是,我不知道我可以做些什么来提高性能,或者即使这是代码或托管服务的问题。因此,我要问的是,所经历的延迟是可以修复的,还是我必须处理的?或者也许我以一种非常低效的方式实现了这个解决方案?任何输入表示赞赏。

4

2 回答 2

1

这个网格是 Ajax 控件吗?如果不是,则延迟可能只是您为每次点击发回。对于每个回发,网格需要重新生成所有 HTML 并将其发回,然后浏览器必须呈现它。这是很多活动!

您可以研究减少必须发送的数据量的方法,例如关闭某些控件的视图状态。或者,您可以查看 Ajax 解决方案。您在服务器端唯一需要做的就是检查图像是否存在:其他一切都可以在 Javascript 中完成。检查文件是否存在的 Ajax 调用在性能方面不会非常昂贵,并且编写起来也相对简单。

一条经验法则(如果您是高级编码人员并且已经知道这一点,我深表歉意):需要的响应越快,您想要进行的回发和对服务器的调用就越少,您想要发送的数据就越少来回。

于 2012-11-30T22:50:58.607 回答
0

我认为单击的 gridview 行正在正常工作,并且您正在调用正确的函数。我认为是你的 File.IsFileExists 函数需要时间。一切都需要发回。我认为这是您的文件检查功能。也许缓存文件名或将其保存在数据库中。也许在数据库上做索引。我认为文件检查正在遍历所有文件。换句话说,Gridview 行单击速度很快,无需代码。

于 2012-11-30T17:41:10.687 回答