实现gridview行点击事件的有效方式?

时间:2012-11-30 17:33:22

标签: c# asp.net performance gridview postback

我想做什么:

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

我现在是怎么做的:

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

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.5s)之间有明显的延迟,这非常令人讨厌。但是,我不知道我可以做些什么来改善性能,或者即使它是代码或托管服务的问题。因此,我要问的是,经历的延迟是否可以解决,或者是否是我必须处理的事情?或许我以非常低效的方式实施了这个解决方案?任何意见都表示赞赏。

2 个答案:

答案 0 :(得分:1)

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

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

经验法则(如果您是高级程序员并且已经知道这一点,我道歉):需要响应的内容越多,您想要制作的服务器的回发和调用就越少,您的数据就越少想要来回发送。

答案 1 :(得分:0)

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