Веб-страница с привязкой данных к управлению GridView может занять много времени. Страница не отображается до тех пор, пока все элементы управления не будут выполнены, и GridView не сможет выполнить рендеринг до того, как данные будут извлечены из базы данных. Итак, давайте загрузим асинхронный GridView и сделаем загрузку страницы быстрее, а воспринимаемая скорость больше.
Этот небольшой трюк на самом деле очень прост и включает встроенную функцию обратного вызова клиента ASP.NET. Несмотря на то, что я не большой поклонник этой функции, время от времени она может быть очень удобной. Лучшая часть этого заключается в том, что вам не нужно сильно менять существующий код. Веб-страница
На веб-странице, на которой размещен элемент управления GridView, вы должны внести 2 небольших изменения.
Шаг 1. инкапсулировать GridView Элемент GridView управления должен быть воплощен с помощью элемента управления HTML с идентификатором атрибута, так что он может ссылаться на JavaScript. Это связано с тем, что GridView не отображает, когда к нему не привязаны данные.
<div id="grid">
<span>Loading...</span>
<asp:GridView runat="Server" ID="gvAsync" />
</div>
Шаг 2. Добавить JavaScript Затем JavaScript необходим для загрузки тонированные и данные связаны GridView на который мы добавили в шаге 1. Помести JavaScript ниже GridView своего окружения Div тега элемент управления HTML.
<script type="text/javascript">
function EndGetData(arg)
{
document.getElementById("grid").innerHTML = arg;
}
setTimeout("<asp:literal runat="server" id="ltCallback" />", 100);
</script>
Code-за
В файл кода есть три небольшие шаги для выполнения.
Шаг 3. Реализация ICallbackEventHandler Нам необходимо реализовать интерфейс, чтобы включить функцию обратного вызова клиента.
public partial class asyncgridview : System.Web.UI.Page, ICallbackEventHandler
Шаг 4. Привязка обратного вызов ссылка Буквальное управление помещены в функции JavaScript в шаге 2 должно содержать ссылку клиента обратного вызова. Добавьте в страницу_Load следующее.
if (!Page.IsCallback)
ltCallback.Text = ClientScript.GetCallbackEventReference(this, "'bindgrid'", "EndGetData", "'asyncgrid'", false);
Шаг 5. Bind сетка и вернуть обработанную HTML Для завершения асинхронной загрузки, мы должны реализовать два метода, которые определяются с помощью интерфейса ICallbackEventHandler
мы реализовали на шаге 3. Один из способов связывает DataTable
с GridView
и отображает элемент управления. Вторые возвращает тонированное HTML методы JavaScript мы определили в шаге 2.
privatestring _Callback;
publicstring GetCallbackResult()
{
return _Callback;
}
publicvoid RaiseCallbackEvent(string eventArgument)
{
DataTable table = RetrieveDataTableFromDatabase();
gvAsync.DataSource = table;
gvAsync.DataBind();
using (System.IO.StringWriter sw =new System.IO.StringWriter())
{
gvAsync.RenderControl(new HtmlTextWriter(sw));
_Callback = sw.ToString();
}
}
Вы можете использовать существующие данные методы связывания для связывания GridView
. Важная часть состоит в том, что GridView
связан с данными перед тем, как метод RaiseCallbackEvent
отображает элемент управления.
Та же методика может использоваться для всех данных, таких как Repeater, FormView
и DataList
.
Код: http://madskristensen.net/post/Asynchronous-GridView-in-5-simple-steps
Является ли пользовательский пейджинг опцией? Где вы загружаете первую, скажем, 10 записей вместо всех записей? Я не имею в виду встроенный поисковый вызов, потому что он загружает весь набор данных, а затем просто показывает первую страницу, что не поможет вашему ситутации. –
Я уже использую пользовательскую подкачку. Файлы будут загружаться в соответствии с выбранным пользователем параметром размера страницы. Я думаю, что проблема возникает при вычислении отсчетов из хранимой процедуры. Вот почему я подумал об удалении этой части счета из пакета загрузки данных и обновления счетчиков с использованием асинхронного вызова. – Ashan