// Этот исходный код предназначен только для изучения ссылки, а не для каких -либо коммерческих целей;
// Если вам нужно изменить и переоценить управление, сохранить информацию об авторском праве полного исходного кода!
// Для получения информации о обновлении управления и новой информации о управлении, пожалуйста, обратите внимание на www.webdiyer.com.
Использование системы;
Использование System.io;
Использование System.Web;
Использование System.Web.UI;
Использование System.Web.UI.WebControls;
Использование System.web.ui.htmlControls;
Использование System.collections.specialized;
Использование System.Text;
Использование System.componentModel;
Использование System.componentmol.design;
Использование System.collections;
Пространство имен Wuqi.webdiyer
{{
#Region Control Server Server Control
#Region Control Описание и пример
/// <summary>
/// Для управления сервером для данных подключения данных в веб -приложении ASP.NET.
/// </summary>
/// <Remarks> В отличие от управления DataGrid, самого управления Paging Paging не отображает никаких данных, а только отображает элемент навигации страницы. Этот элемент управления может разобраться в данных DataGrid, DataList, Repeater и пользовательских управления. большой!
/// <p> aspnetpager 2.0 вновь добавлена функция пейджина через URL, который позволяет посетителям напрямую вводить соответствующий URL для доступа к любой странице, а поисковая система также может напрямую извлекать каждую страницу. </p>
/// <p> Чтобы использовать элемент управления Paging Paging, по крайней мере, он должен указать его атрибут <see cref = "recordCount"/>, указать и написать программу обработки события <See Cref = "pageChanged"/>.
/// <См. Cref = "recordcount"/> Атрибут указывает общее количество всех данных, которые будут нанесены на странице в пейджинге.
/// Если программа обработки событий <см. Cref = "PageChanged"/> не указана и не записана, то когда пользователь нажимает на навигационный элемент страницы или индекс ввода ввода ручного стиля в текстовом поле INDEX страницы и отправьте его страницу. Полем
/// Метод пейджинга управления ASPnetPager в основном такой же, как и у DataGrid, то есть в его <см. Cref = "PageChanged"/> Программа обработки событий <см. Cref = "pagechangedeventargs" <see cref = «PageChangeDeventargs.newpageindex»/> присваивается атрибуту <sie cref = "currentPageIndex"/> атрибута <see cref = "currentPageIndex"/>, а затем повторно -соблюдайте новые управления отображением данных и отображения данных. </p> </замечания>
/// <Пример> Следующие примеры показывают, как использовать ASPNetPager для страницы DataGrid.
/// <code> <!
/// <%@ page language = "c#"%>
/// <%@ import namespace = "System.data"%>
/// <%@import namespace = "System.data.sqlclient"%>
/// <%@Импорт имен пространство = "System.configuration"%>
/// <%@Register TagpRefix = "webdiyer" namespace = "wuqi.webdiyer" assembly = "aspnetpager"%>
/// <html>
/// <head>
/// <title> Добро пожаловать на webdiyer.com </title>
/// <script runat = "server">
/// sqlConnection conn;
/// sqlcommand cmd;
/// void page_load (Object src, EventArgs E)
/// {
// conn = new SQLConnection (configurationSettings.appsettings ["connstr"];
/// if (! page.ispostback)
/// {
/// cmd = new sqlcommand ("getNews", conn);
/// cmd.commandtype = commandType.StoredProcedure;
/// cmd.parameters.add ("@posgeindex", 1);
/// cmd.parameters.add ("@pagesize", 1);
/// cmd.parameters.add ("@docount", true);
// conn.open ();
/// pager.recordcount = (int) cmd.executecalal ();
// conn.close ();
/// bindData ();
///}
///}
////
/// void binddata ()
/// {
/// cmd = new sqlcommand ("getNews", conn);
/// cmd.commandtype = commandType.StoredProcedure;
/// cmd.parameters.add ("@posgeindex", pager.currentpageindex);
/// cmd.parameters.add ("@pagesize", pager.pagesize);
/// cmd.parameters.add ("@docount", false);
// conn.open ();
/// dataGrid1.datasource = cmd.executereader ();
/// dataGrid1.databind ();
// conn.close ();
/// pager.custominfotext = "Запись всего: <font color =" blue "> <b>"+pager.recordcount.tostring ()+"</font>" ";
/// pager.custominfotext+= "Общее число страницы: <font color =" blue "> <b>"+pager.pagecount.tostring ()+"</font>" ";
/// pager.custominfotext+= "Текущая страница: <font color =" red "> <b>"+pager.currentpageindex.tostring ()+"</b> </font>"
///}
/// void -изменение (Object SRC, PageChangedEventargs E)
/// {
/// pager.currentpageindex = e.newpageindex;
/// bindData ();
///}
/// </script>
/// <meta http-equiv = "content-language" content = "zh-cn">
/// <meta http-equiv = "content-type" content = "text/html; charset = gb2312">
/// <meta name = "general" content = "EditPlus">
/// <meta name = "Автор" content = "webDiyer ([[электронная почта защищена])"> ">">
/// </head>
/// <body>
/// <form runat = "server" id = "form1">
/// <ASP: DataGrid ID = "DataGrid1" Runat = "Server"/>
/// <webdiyer: aspnetpager id = "pager"
/// runat = "Сервер"
/// pagesize = "8"
/// numericbuttoncount = "8"
/// showcustominfosection = "Left"
/// pagingbuttonspacing = "0"
/// showinputbox = "Всегда"
/// cssclass = "mypager"
/// horizontalally = "справа"
/// OnPageChanged = "Changepage"
/// Отправить buttontext = "Повернуть на"
/// NumericButtonTextFormatString = "[{0}]"/>
/// </form>
/// </body>
/// </html>
///]]>
/// </code>
/// <p> Процедура хранения SQL Server, используемая в этом примере: </p>
/// <code>
/// <!
/// Создание процедуры GetNews
/// (@pagesize int,
/// @pageindex int,
@Docount bit)
/// как
/// установить nocount на
/// if (@docount = 1)
/// Выберите счет (ID) из новостей
/// еще
/// начинать
/// объявить @indextable tab
/// объявить @pageLowerbound int
/// объявить @PagePerBound Int
/// SET @PageLowerBound = (@PageIndex-)*@PageSize
/// set @[Электронная почта защищена] [Электронная почта защищена]
/// SET ROWCOUNT @PageOpperBound
/// Вставка в @Indextable (NID) выберите ID из Order Order по addtime desc
/// Выберите O.ID, O.Source, O.Title, O.Addtime из новостей
/// и t.id> @pageelowerbound и t.id <= @PageOpperBound Order по t.id
/// конец
/// Установить nocount
/// ИДТИ
///]]>
/// </code> </example>
#Endregion
[DefaultProperty ("PageSize")]]
[Defaultevent ("PageChanged")]]]
[Parsechildrn (false)]
[Steristchildren (ложь)]
[description ("" Control Pagination для веб -приложений ASP.NET ")]]]]]]]]]]]]]]
[Designer (typeof (pagerdesigner)]]]]
[ToolboxData (<{0}: aspnetPager Runat = Server> </{0}: AspnetPager> ")]]
Public Class AspnetPager: Panel, InamingContainer, iPostbackeventhandler, ipostbackdatahandler
{{
Частная строка cssclassname;
Частная строка urlpageindexname = "page";
Частный Bool urlpaging = false;
Private String inputPageIndex;
Частная строка currenturl = null;
Частное имя ValueCollection urlParams = null;
/// Получить или установить значение.
/// </summary>
[Просмотр (правда),
Категория («Кнопка навигации»), DefaultValue (true), description («Указывает, когда мышь остается на кнопке навигации, является инструментом дисплея»]]]]]]]]]]]
Public Bool ShoweravigationTooltip
{{
получать
{{
Object obj = viewState ["shoneavigationTooltip"];
Return (obj == null)?
}
набор
{{
ViewState ["showdavigationTooltip"] = value;
}
} /// <summary>
/// Получить или установить инструмент кнопки навигации, чтобы запустить текстовый формат.
/// </summary>
[Просмотр (правда),
Категория («Кнопка навигации»),
DefaultValue ("Повернуть на страницу № {0}"),
Описание («Кнопка навигации на навигации на напоминание формат текста»)]]
Публичная строка
{{
получать
{{
Object obj = viewState ["navigationTooltipTextFormatString"];
Return (obj == null)?
}
набор
{{
строка tip = value;
if.trim ().
tip = "{0}";
ViewState
}
} /// <summary>
/// Получить или установить значение.
/// </summary>
/// <lmarks>
/// При настройке этого значения на истину и не используя кнопку изображения, значение кнопки «Индекс» 1, 2, 3 и т. Д. Будет заменена китайскими именами, два, два и три.
/// </замечания>
[Просмотр (правда),
Категория («Кнопка навигации»),
DefaultValue (false),
Описание («Будет ли кнопка значения индекса страницы заменена китайскими числами, вторым и третьим»]]]]
Public Bool Chinesepageindex
{{
получать
{{
Object obj = viewState ["chinesePageIndex"];
Return (obj == null)?
}
набор
{{
ViewState ["ChinesePageIndex"] = value;
}
} /// <summary>
/// Получить или установить формат отображения текста на кнопке навигации по номеру.
/// </summary>
/// <Значение>
/// String, укажите формат отображения текста в значении индекса страницы страницы, значение по умолчанию - <см. Cref = "string.empty"/>, то есть свойство не установлено. </value>
/// <lmarks>
/// Используйте свойства numericbuttontextformatstring, чтобы указать формат отображения кнопки «Индексированное значение».
///, если значение установлено на «[{0}]», текст индекса будет отображаться как: [1] [2] [3] ..., установите значение на "-{0}-", а затем поверните текст индекса в: -1--2- -3- ...
/// </замечания>
[Просмотр (правда),
defaultValue ("" ") ,,
Категория («Кнопка навигации»),
Описание («Формат отображения текста на кнопке численного индекса страницы»)]]
Public String numericbuttontextformatstring
{{
получать
{{
объект obj = viewState
Return (obj == null)?
}
набор
{{
ViewState ["NumericButtontexTextFormatring"] = value;
}
} /// <summary>
/// Получить или установить тип кнопки навигации по пейджинге, даже если текст все еще остается изображением.
/// </summary>
/// <lmarks>
/// Чтобы использовать кнопку изображения, вам нужно подготовить следующие изображения: десять значений от 0 до 9 (когда ShowPageIndex установлен на True), первая страница, предыдущая страница, следующая страница, последняя страница и многое другое Все больше и больше страниц (...) Пять кнопок изображений (когда ShowFirstlast и ShowPrevNext установлены на True),
/// Если необходимо численная кнопка текущего индекса страницы, чтобы отличаться от других численных кнопок индекса страницы, вам необходимо подготовить кнопку изображения текущего индекса страницы;
/// Если изображение первой страницы отключений, последней страницы, следующей страницы и последней страницы отличается от обычной кнопки, вам нужно подготовить изображения этих четырех кнопок в состоянии отключенного;
/// <p> <b> Правила именования файла изображения следующие: </b> </p>
/// <p> от 0 до 9 десяти цифровых кнопок, изображение должно быть названо «value+buttonimageNameExtexexenses+buttoniMageExtentation».
/// ButtonimageExtenting - это имя суффикса файла изображения, например .gif или .jpg и т. Д., Любые типы файлов изображения, которые могут отображаться в браузере. Например, файл изображения индекса страницы «1» может быть назван «1.gif» или «1.jpg»,
/// Когда у вас есть два или более набора файлов изображений, вы можете различить различные наборы различных наборов изображений, указав значение атрибута ButtoniMageNameExtent. "1.gif". скоро. </p>
/// <p> Имя файла изображения кнопки первой страницы начинается с «First». Независимо от того, использует ли ButtonimageNameExketNsion, ButtonimageNameExtension зависит от настройки численной кнопки и есть ли больше изображений. </p>
/// </замечания>
/// <Пример>
/// Следующий пример фрагмента кода при использовании кнопки изображения:
/// <p>
/// <code> <!
/// <webdiyer: aspnetpager runat = "server"
/// id = "pager1"
/// OnPageChanged = "Changepage"
/// pagingbuttontype = "image"
/// ImagePath = "Изображения"
/// buttonimageNameExtent = "n"
/// disabledbuttonimageNameExtension = "g"
////buttoniMageExtent = "GIF"
/// cpibittonimageNameExension = "r"
/// pagingbuttonspacing = 5/>
///]]>
/// </code>
/// </p>
/// </Пример>
[Просмотр (правда),
DefaultValue (PagingButtonType.text),
Категория («Кнопка навигации»),
Описание
Public Pagingbuttontype Pagingbuttisepe
{{
получать
{{
объект obj = viewState
Return (obj == null)?
}
набор
{{
ViewState
}
} /// <summary>
/// Получить или установить тип навигационной цифровой кнопки, которая действительна только тогда, когда PagingButtonType установлен на изображение.
/// </summary>
/// <lmarks>
/// Когда вы устанавливаете PagingButtonType на изображение, когда вы не хотите, чтобы кнопка «Индекс» индекса страницы использовала изображение, вы можете установить значение на текст, что заставит кнопку «Индекс». Использовать текст вместо кнопки изображения Полем
/// </замечания>
[Просмотр (правда),
DefaultValue (PagingButtonType.text),
Категория («Кнопка навигации»),
Описание («Тип» кнопки численной цифры навигации страницы »)]]]]
Public Pagingbuttontype numericbuttontype
{{
получать
{{
объект obj = viewState
Return (obj == null)?
}
набор
{{
ViewState ["NumericButtonType"] = value;
}
} /// <summary>
/// Получить или установить тип первой страницы, последней страницы, следующей страницы и последней страницы.
/// </summary>
/// <lmarks>
/// Когда вы устанавливаете PagingButtonType на изображение, но не хотите использовать изображение для первой, следующей страницы, следующей страницы и на последней странице, вы можете установить значение на текст, что сделает предыдущие четыре кнопки на предыдущем Четыре кнопки используют текст вместо кнопки изображения.
/// </замечания>
[Просмотр (правда),
Категория («Кнопка навигации»),
DefaultValue (PagingButtonType.text),
Описание
Public Pagingbuttontype
{{
получать
{{
Object obj = viewState ["NavigationButtonType"];
Return (obj == null)?
}
набор
{{
ViewState ["NavigationButtonType"] = value;
}
} /// <summary>
/// Получить или установить тип кнопки «Больше страниц» (...), которая действительна только тогда, когда PagingButtonType устанавливается на изображение.
/// </summary>
/// <lmarks>
/// Когда вы устанавливаете кнопку PagingButtonType на изображение, но не хотите больше страниц (...) для использования изображений, вы можете установить это значение в текст, что сделает больше кнопок страниц, используя текст вместо кнопки изображения.
/// </замечания>
[Просмотр (правда),
Категория («Кнопка навигации»),
DefaultValue (PagingButtonType.text),
Описание ("больше страниц" (...) Тип кнопки ")]
Public Pagingbuttontype Morebuttonpe
{{
получать
{{
Object obj = viewState ["materButtisepe"];
Return (obj == null)?
}
набор
{{
ViewState ["materButtisepe"] = value;
}
} /// <summary>
/// Получить или установить расстояние между навигационной кнопкой Paging.
/// </summary>
[Просмотр (правда),
Категория («Кнопка навигации»),
DefaultValue (typeof (Unit), "5px"),
Описание
Общественное подразделение Pagingbuttonspacing
{{
получать
{{
Object obj = viewState ["pagingbuttonspacing"];
Return (obj == null)?
}
набор
{{
ViewState ["PagingButtonSpacing"] = value;
}
} /// <summary>
/// Получить или установить значение, которое указывает, отображаются ли кнопки первой и последней страницы на элементе навигации страницы.
/// </summary>
[Просмотр (правда),
Описание
Категория («Кнопка навигации»),
DefaultValue (True)]
Public Bool Showfirstlast
{{
получать
{{
Object obj = viewState ["showfirstlast"];
Return (obj == null)?
}
set {viewState ["showfirtlast"] = value;}
} /// <summary>
/// Получение или настройка значения, это значение указывает, отображаются ли предыдущая страница и следующая страница в элементе навигации страницы.
/// </summary>
[Просмотр (правда),
Описание
Категория («Кнопка навигации»),
DefaultValue (True)]
Public Bool Showprevnext
{{
получать
{{
Object obj = viewState ["showPrevnext"];
Return (obj == null)?
}
set {viewState ["showprevnext"] = value;}
} /// <summary>
/// Получить или установить значение, которое указывает, отображается ли кнопка значения индекса страницы в элементе навигации страницы.
/// </summary>
[Просмотр (правда),
Описание ("отображается ли кнопка значения в элементе навигации страницы"),
Категория («Кнопка навигации»),
DefaultValue (True)]
Public Bool ShowPageIndex
{{
получать
{{
Object obj = viewState ["showPageIndex"];
Return (obj == null)?
}
set {viewState ["showPageIndex"] = value;}
} /// <summary>
/// Получить или установить в текст, отображаемый кнопкой первой страницы.
/// </summary>
[Просмотр (правда),
Описание («Текст отображается на кнопке первой страницы»),
Категория («Кнопка навигации»),
DefaultValue ("<font face =" webdings "> 9 </font>")]]]]
public String FirstPageText
{{
получать
{{
Object obj = viewState ["FirstPageText"];
Return (obj == null)?
}
SET {viewState ["FirstPageText"] = value;}
} /// <summary>
/// Получить или установить на текст, отображаемый в кнопке предыдущей страницы.
/// </summary>
[Просмотр (правда),
Описание («Текст отображается на кнопке предыдущей страницы»),
Категория («Кнопка навигации»),
DefaultValue ("<font face =" webdings "> 3 </font>")]]]]
Public String PrevageText
{{
получать
{{
Object obj = viewState ["prevageText"];
Return (obj == null)?
}
SET {viewState ["prevpageText"] = value;}
} /// <summary>
/// Получить или установить текст, отображаемый на следующей странице.
/// </summary>
[Просмотр (правда),
Описание («Текст отображается на кнопке следующей страницы»),
Категория («Кнопка навигации»),
DefaultValue ("<font face =" webdings "> 4 </font>")]]]]
Public String NextPageText
{{
получать
{{
Object obj = viewState ["NextPageText"];
Return (obj == null)?
}
set {viewState ["nextpageText"] = value;}
} /// <summary>
/// Получить или установить текст, отображаемый в качестве последней страницы.
/// </summary>
[Просмотр (правда),
Описание («Текст отображается на кнопке последней страницы»),
Категория («Кнопка навигации»),
DefaultValue ("<font face =" webdings ">: </font>")]]]]
Public String LastPageText
{{
получать
{{
Object obj = viewState ["lastPageText"];
Return (obj == null)?
}
SET {viewState ["lastPageText"] = value;}
} /// <summary>
/// Получить или установить в количестве численных кнопок, отображаемых одновременно в элементе навигации страницы в элементе управления <See Cref = "aspNetPager"/>.
/// </summary>
[Просмотр (правда),
Описание
Категория («Кнопка навигации»),
DefaultValue (10)]
Public int numericbuttoncount
{{
получать
{{
Object obj = viewState ["NumericButtonCount"];
Return (obj == null)?
}
SET {viewState ["numericButtonCount"] = value;}
} /// <summary>
/// Получить или установить значение, которое указывает, отображаются ли отключенные кнопки.
/// </summary>
/// <lmarks>
/// Это значение используется, чтобы указать, отображается ли кнопка отключенной страницы. Будьте кнопка последней страницы будет отключена, у запрещенных кнопок нет ссылки, и нажатие на кнопку не будет иметь никакого эффекта.
/// </замечания>
[Просмотр (правда),
Категория («Кнопка навигации»),
Описание ("Показать кнопку отключений"),
DefaultValue (True)]
Public Bool ShowdisabledButtons
{{
получать
{{
Object obj = viewState ["showdisabledbutton"];
Return (obj == null)?
}
набор
{{
ViewState ["showdisabledbuttons"] = value;
}
}
#Endregion
#Region image кнопки
/// <summary>
/// Получить или установить путь файла изображения при использовании кнопки изображения.
/// </summary>
[Просмотр (правда),
Категория («кнопка изображения»),
Описание («При использовании кнопки изображения укажите путь файла изображения»),),),
DefaultValue (null)]
Public String ImagePath
{{
получать
{{
String imgpath = (String) ViewState ["ImagePath"];
if (imgpath! = null)
imgpath = this.rsolveurl (imgpath);
Вернуть Imgpath;
}
набор
{{
string imgpath = value.trim ().
ViewState ["ImagePath"] = (imgpath.endswith ("/")? Imgpath: imgpath+"/";
}
}
/// <summary>
/// Получить или установить При использовании кнопки изображения, типа изображения, например, GIF или JPG, это значение является именем суффикса файла изображения.
/// </summary>
[Просмотр (правда),
Категория («кнопка изображения»),
DefaultValue (". GIF"),
Описание («При использовании кнопки изображения тип изображения, например, GIF или JPG, это значение является именем суффикса файла изображения»)]]]
Public String buttonimageExtent
{{
получать
{{
Object obj = viewState ["buttonimageExtent"];
Return (obj == null)?
}
набор
{{
string ext = value.trim ();
ViewState ["buttonimageExtension"] = (ext.StartSwith (".")? Ext: ("."+Ext);
}
}
/// <summary>
/// Получить или установить строку суффикса пользовательского имени файла изображения, чтобы отличить различные типы кнопок.
/// </summary>
/// <Remarks> <mote> Примечание: </not>> Это значение не является суффиксом файла, а строкой, добавленной к имени изображения, чтобы различать различные файлы изображения, такие как ::
/// В настоящее время есть два набора кнопок, один из которых «1» может быть «1f.gif», и имя изображения «1» в другом наборе может быть «1n.gif», из которых F и N - это ButtonimageNameExtension. </замечания>
[Просмотр (правда),
DefaultValue (NULL),
Категория («кнопка изображения»),
Описание («Суффикс« настраиваемого имени файла изображения), например, кнопкой емкостью рисунка »изображения« 1f.gif » - это« f »« »)]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
Public String buttonimageEnameExtension
{{
получать
{{
Вернуть (строка) ViewState
}
набор
{{
ViewState ["buttonimageNameExtension"] = value;
}
}
/// <summary>
/// Получить или установить суффикс имени изображения кнопки «Индекс текущего страницы».
/// </summary>
/// <lmarks>
/// Когда <см. Cref = "PagingButtonType"/> устанавливается на изображение, этот атрибут позволяет установить символ имени изображения, используемый кнопкой Charve Page Index, поэтому кнопки индекса текущей страницы можно использовать отличаться от другой страницы Индексные кнопки.
/// </замечания>
[Просмотр (правда),
DefaultValue (NULL),
Категория («кнопка изображения»),
Описание («Строка факультуру имени изображения кнопки индекса текущей страницы»)]]
Public String cpibittonimagNameExtension
{{
получать
{{
объект obj = viewState
Return (obj == null)?
}
набор
{{
ViewState ["cpibittonimagenameExension"] = value;
}
}
/// <summary>
/// Получить или установить навигационную навигационную кнопку «Отключенная страница».
/// </summary>
/// <lmarks>
/// Когда <см. Cref = "PagingButtontype"/> устанавливается на изображение, это значение позволяет установить кнопку навигации страницы (включая первую страницу, предыдущую страницу, предыдущую страницу, предыдущая страница, предыдущая страница, Предыдущая страница, название файла изображения, строка суффикса следующей страницы и последняя страница последней страницы, поэтому кнопка навигации «Отключенная страница» может отличаться от обычной навигационной кнопки страницы. Если это значение не установлено, значение по умолчанию - <см. Cref = "buttonimagerextent"/>, то есть кнопка навигации отключена на странице использует то же изображение, что и навигационная кнопка «Обычная страница».
/// </замечания>
[Просмотр (правда),
DefaultValue (NULL),
Категория («кнопка изображения»),
Описание ("Имя изображения строка громкости навигационной навигационной навигационной кнопки страницы")]]
Public String DisabledbuttonimageNameExtension
{{
получать
{{
объект obj = viewState
Return (obj == null)?
}
набор
{{
ViewState
}
}
/// <summary>
/// Укажите метод выравнивания при использовании кнопки изображения.
/// </summary>
[Просмотр (правда),
описание
defaultValue (imleAnign.baseline),
Категория ("Кнопка изображения")]]]
Публичный обратный экзамен наносит путомизации
{{
получать
{{
Object obj = viewState ["buttoniMageAlign"];
Return (obj == null)?
}
set {viewState ["buttoniMagealign"] = value;}
}
#Endregion
#Region Paging
/// <summary>
/// Получить или установить, включить ли URL -адрес для передачи информации о странице.
/// </summary>
/// <lmarks>
/// Включите метод подключения URL, чтобы пройти индекс страницы, который пользователь хочет получить через URL.
/// Таким образом, каждое данные восстанавливаются до начального значения или необходимо получить при каждой пейджинге. Использование метода подкидки URL не поддерживает значение атрибута динамических изменений в управлении пейджингом.
/// Потому что новое значение атрибута временно не может передать URL на следующую страницу.
/// </замечания>
/// <Пример> Следующие примеры показывают, как использовать метод подключения URL ASPNetPager для настройки DataGrid (с помощью базы данных Access):
/// <code> <!
/// <%@Register TagpRefix = "webdiyer" namespace = "wuqi.webdiyer" assembly = "aspnetpager"%>
/// <%@import namespace = "System.data.oledb"%>
/// <%@ import namespace = "System.data"%>
/// <%@ page language = "c#" debug = true%>
/// <html>
/// <head>
/// <title> Добро пожаловать на webdiyer.com </title>
/// <script runat = "server">
/// oledbconnection conn;
/// oledbcommand cmd;
/// void page_load (Object src, eventargs e) {{{
/// conn = new OLEDBConnection ("Provider = microsoft.jet.oledb.4.0; Data Source ="+server.mappath ("Accept/aspnetpager.mdb");
/// if (! page.ispostback) {
/// cmd = new oledbcommand («select count (newside) из WQNews», Conn);
// conn.open ();
/// pager.recordcount = (int) cmd.executecalal ();
// conn.close ();
/// bindData ();
///}
///}
////
/// void binddata () {{)
/// cmd = new OledbCommand («Выберите газету, заголовок, источник, addtime из порядок wqnews от addtime design, conn); conn); conn); conn); conn); conn); conn); conn); conn); Conn;
/// oledbdataadapter adapter = new oledbdataadapter (cmd);
/// Набор данных ds = new DataSet ();
/// adapter.fill (ds, pager.pagesize*(pager.currentpageindex-), pager.pagerize, "News");
/// dg.datasource = ds.tables ["Новости"];
/// dg.databind ();
///}
////
/// void madespage (Object src, pagechangedeventargs e) {{
/// pager.currentpageindex = e.newpageindex;
/// bindData ();
///}
////
/// </script>
/// <meta http-equiv = "content-language" content = "zh-cn">
/// <meta http-equiv = "content-type" content = "text/html; charset = gb2312">
/// <meta name = "general" content = "EditPlus">
/// <meta name = "Автор" content = "webDiyer ([[электронная почта защищена])"> ">">
/// </head>
/// <body>
/// <form runat = "server" id = "form1">
/// <h2 align = "center"> aspnetpager paging example </h2>
/// <asp: dataGrid id = "dg" runat = "server"
/// cellpadding = "4" align = "center"/>
////
/// <webdiyer: aspnetpager runat = "server" id = "pager"
/// OnPageChanged = "Changepage"
/// horizontalally = "center"
////
/// pagesize = "8"
/// showinputbox = "Всегда"
/// Отправить ButtonStyle = "Граница: 1PX SOLID #000066; Высота: 20px; ширина: 30px"
/// inputBoxStyle = "Border: 1px #0000ff Solid; Text-align: Center"
/// Отправить buttontext = "Повернуть на"
/// urlPaging = "true"
/// urlpageindexname = "pageindex"/>
/// </form>
/// </body>
/// </html>
///]]> </code>
/// </Пример>
[Просмотр (правда),
категория ("пейджинг"),
DefaultValue (false),
Описание («использовать ли URL для передачи информации о страницах на страницы»)]]]
Общественная лопатка Urlpaging
{{
получать
{{
Вернуть UrlPaging;
}
набор
{{
urlPaging = значение;
}
}
/// <summary>
/// Получить или установить его при включении метода подкидки URL, и имя параметра индекса страницы, который будет передаваться в URL -адрес, находится в URL.
/// </summary>
/// <lmarks>
/// Этот атрибут позволяет настроить имя параметра индекса страницы, чтобы пройти через индекс страницы передачи URL, чтобы не повторять с существующим именем параметра.
/// <p> Значение по умолчанию атрибута - «страница», то есть когда подкрепление URL -адреса, URL -адрес, отображаемый в адресной строке браузера, аналогичен: </p> http://www.webdiyer.com. /aspnetpager/samples/datagrid_url.aspx?
/// <p> Если значение изменено на «pageIndex», URL выше станет: </p> <p> http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pageindex = 2 </p>
/// </замечания>
[Просмотр (правда),
DefaultValue ("Page"),
категория ("пейджинг"),
Описание («Когда включен метод подключения URL, имя параметра индекса страницы, чтобы указать в URL»)]]]]]
Public String urlpageindexname
{{
get {return urlpageindexname;}
set {urlpageindexname = value;}
}
/// <summary>
/// Получить или установить индекс текущей страницы отображения.
/// </summary>
/// <Замечание> Используйте этот атрибут, чтобы определить страницу, отображаемую в настоящее время в управлении ASPNETPAGER. Этот атрибут также используется для управления страницей, отображаемой программированием.
/// <p> <b> Примечание. </p> </замечания>
[Readonly (true),
Browsable (false),
Описание («Индекс текущей страницы отображения»),
категория ("пейджинг"),
DefaultValue (1),
DesignerSerializationVisibility (DesignerSerializationVisibility.hidden)]
Public Int CurrentPageIndex
{{
получать
{{
Object CPAGE = viewState ["currentPageIndex"];
int pindex = (cpage == null)?
If (pindex> pagecount && pagecount> 0)
Вернуть узову;
иначе if (pindex <1)
Возврат 1;
Вернуть pindex;
}
набор
{{
int cpage = value;
if (cpage <1)
CPAGE = 1;
Иначе if (cpage> this.pagecount)
cpage = this.pagecount;
ViewState ["currentPageIndex"] = cPage;
}
}
/// <summary>
/// Получить или установить общее количество всех записей, которые необходимо провести.
/// </summary>
/// <lmarks>
/// Когда страница загружается в первый раз, ее следует предоставить атрибуту всем общему количеству записей пейджинга в таблице данных, возвращаемых из процедуры хранения или оператора SQL. На странице на странице значение получается из ViewState при возвращении, поэтому оно позволяет избежать доступа к базе данных каждый раз, когда лишается лиц. AspnetPager вычисляет общее количество страниц, необходимых всеми данными, основанными на общем количестве данных, которые необходимо провести, и атрибуты <см. Cref = "PageSize"/> />.
/// </замечания>
/// <Пример>
/// Приведенный ниже пример показывает, как общее количество записей, возвращенных из оператора SQL, присваивается атрибуту:
/// <p>
/// <code> <!
/// <html>
/// <head>
/// <title> Добро пожаловать на webdiyer.com </title>
/// <script runat = "server">
/// sqlConnection conn;
/// sqlcommand cmd;
/// void page_load (Object src, EventArgs E)
/// {
// conn = new SQLConnection (configurationSettings.appsettings ["connstr"];
/// if (! page.ispostback)
/// {
/// cmd = new sqlcommand ("select count (id) из новостей", Conn);
// conn.open ();
/// pager.recordcount = (int) cmd.executecalal ();
// conn.close ();
/// bindData ();
///}
///}
////
/// void binddata ()
/// {
/// cmd = new sqlcommand ("getPagedNews", conn);
/// cmd.commandtype = commandType.StoredProcedure;
/// cmd.parameters.add ("@posgeindex", pager.currentpageindex);
/// cmd.parameters.add ("@pagesize", pager.pagesize);
// conn.open ();
/// dataGrid1.datasource = cmd.executereader ();
/// dataGrid1.databind ();
// conn.close ();
///}
/// void -изменение (Object SRC, PageChangedEventargs E)
/// {
/// pager.currentpageindex = e.newpageindex;
/// bindData ();
///}
/// </script>
/// <meta http-equiv = "content-language" content = "zh-cn">
/// <meta http-equiv = "content-type" content = "text/html; charset = gb2312">
/// <meta name = "general" content = "EditPlus">
/// <meta name = "Автор" content = "webDiyer ([[электронная почта защищена])"> ">">
/// </head>
/// <body>
/// <form runat = "server" id = "form1">
/// <ASP: DataGrid ID = "DataGrid1" Runat = "Server"/>
////
/// <webdiyer: aspnetpager id = "pager" runat = "server"
/// pagesize = "8"
/// numericbuttoncount = "8"
/// showcustominfosection = "до"
/// showinputbox = "Всегда"
/// cssclass = "mypager"
/// horizontalally = "center"
/// OnPageChanged = "ChangePage"/>
////
/// </form>
/// </body>
/// </html>
///]]>
/// </code> </p>
/// <p> Код процедуры хранения, используемый в этом примере, следующим образом: </p>
/// <code> <!
/// Создание процедуры getPagedNews
/// (@pagesize int,
@pageindex int)
/// как
/// установить nocount на
/// объявить @indextable tab
/// объявить @pageLowerbound int
/// объявить @PagePerBound Int
/// SET @PageLowerBound = (@PageIndex-)*@PageSize
/// set @[Электронная почта защищена] [Электронная почта защищена]
/// SET ROWCOUNT @PageOpperBound
/// insert into @indextable(nid) select id from news order by addtime desc
/// select o.id,o.title,o.source,o.addtime from news o,@indextable t where o.id=t.nid
/// and t.id>@pagelowerbound and t.id<[email protected] order by t.id
/// set nocount off
/// ИДТИ
/// ]]>
/// </code>
/// </example>
[browsable(false),
description("要分页的所有记录的总数,该值须在程序运行时设置,默认值为225是为设计时支持而设置的参照值。"),
category("data"),
defaultvalue(225)]
public int recordcount
{
получать
{
object obj=viewstate["recordcount"];
return (obj==null)?0:(int)obj;
}
set{viewstate["recordcount"]=value;}
}
/// <summary>
/// 获取当前页之后未显示的页的总数。
/// </summary>
[browsable(false),
designerserializationvisibility(designerserializationvisibility.hidden)]
public int pagesremain
{
получать
{
return pagecount-currentpageindex;
}
}
/// <summary>
/// 获取或设置每页显示的项数。
/// </summary>
/// <remarks>
/// 该值获取或设置数据呈现控件每次要显示数据表中的的数据的项数,aspnetpager根据该值和<see cref="recordcount"/> 来计算显示所有数据需要的总页数,即<see cref="pagecount"/>的值。</remarks>
/// <example>以下示例将<see cref="aspnetpager"/> 设置为允许每页显示8条数据:
/// <code>
/// <![cdata[
/// ...
/// <webdiyer:aspnetpager id="pager" runat="server" pagesize=8 onpagechanged="changepage"/>
/// ...
/// ]]></code></example>
[browsable(true),
description("每页显示的记录数"),
category("分页"),
defaultvalue(10)]
public int pagesize
{
получать
{
object obj=viewstate["pagesize"];
return (obj==null)?10:(int)obj;
}
набор
{
viewstate["pagesize"]=value;
}
}
/// <summary>
/// 获取在当前页之后还未显示的剩余记录的项数。
/// </summary>
[browsable(false),
designerserializationvisibility(designerserializationvisibility.hidden)]
public int recordsremain
{
получать
{
if(currentpageindex<pagecount)
return recordcount-(currentpageindex*pagesize);
return 0;}
}
/// <summary>
/// 获取所有要分页的记录需要的总页数。
/// </summary>
[browsable(false),
designerserializationvisibility(designerserializationvisibility.hidden)]
public int pagecount
{
get{return (int)math.ceiling((double)recordcount/(double)pagesize);}
}
#endregion
#region textbox and submit button
/// <summary>
/// 获取或设置页索引文本框的显示方式。
/// </summary>
/// <remarks>
/// 页索引文件框允许用户手式输入要访问的页的索引,当页数非常多时,显示页索引文本框非常方便用户跳转到指定的页,默认情况下,该文本框只有在总页数大于或等于<see cref="showboxthreshold"/> 的值时才显示,否则不显示,要想该文本框任何时候都显示,请将其值设为always,若希望任何时候都不显示,则应设为never。
///</remarks>
[browsable(true),
описание
category("文本框及提交按钮"),
defaultvalue(showinputbox.auto)]
public showinputbox showinputbox
{
получать
{
object obj=viewstate["showinputbox"];
return (obj==null)?showinputbox.auto:(showinputbox)obj;
}
set{viewstate["showinputbox"]=value;}
}
/// <summary>
/// 获取或设置应用于页索引输入文本框的css类名。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
description("应用于页索引输入文本框的css类名")]
public string inputboxclass
{
получать
{
return (string)viewstate["inputboxclass"];
}
набор
{
if(value.trim().length>0)
viewstate["inputboxclass"]=value;
}
}
/// <summary>
/// 获取或设置页索引输入文本框的css样式文本。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
description("应用于页索引输入文本框的css样式文本")]
public string inputboxstyle
{
получать
{
return (string)viewstate["inputboxstyle"];
}
набор
{
if(value.trim().length>0)
viewstate["inputboxstyle"]=value;
}
}
/// <summary>
/// 获取或设置页索引页索引输入文本框前的文本字符串值。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
description("页索引输入文本框前的文本内容字符串")]
public string textbeforeinputbox
{
получать
{
return (string)viewstate["textbeforeinputbox"];
}
набор
{
viewstate["textbeforeinputbox"]=value;
}
}
/// <summary>
/// 获取或设置页索引文本输入框后的文本内容字符串值。
/// </summary>
[browsable(true),
defaultvalue(null),
category("文本框及提交按钮"),
description("页索引输入文本框后的文本内容字符串")]
public string textafterinputbox
{
получать
{
return (string)viewstate["textafterinputbox"];
}
набор
{
viewstate["textafterinputbox"]=value;
}
}
/// <summary>
/// 获取或设置提交按钮上的文本。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue("go"),
description("提交按钮上的文本")]
public string submitbuttontext
{
получать
{
object obj=viewstate["submitbuttontext"];
return (obj==null)?"go":(string)obj;
}
набор
{
if(value.trim().length>0)
viewstate["submitbuttontext"]=value;
}
}
/// <summary>
/// 获取或设置应用于提交按钮的css类名。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
описание
public string submitbuttonclass
{
получать
{
return (string)viewstate["submitbuttonclass"];
}
набор
{
viewstate["submitbuttonclass"]=value;
}
}
/// <summary>
/// 获取或设置应用于提交按钮的css样式。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
description("应用于提交按钮的css样式")]
public string submitbuttonstyle
{
получать
{
return (string)viewstate["submitbuttonstyle"];
}
набор
{
viewstate["submitbuttonstyle"]=value;
}
}
/// <summary>
/// 获取或设置自动显示页索引输入文本框的最低起始页数。
/// </summary>
/// <remarks>
/// 当<see cref="showinputbox"/> 设为auto(默认)并且要分页的数据的总页数达到该值时会自动显示页索引输入文本框,默认值为30。该选项当<see cref="showinputbox"/> 设为never或always时没有任何作用。
/// </remarks>
[browsable(true),
description("指定当showinputbox设为showinputbox.auto时,当总页数达到多少时才显示页索引输入文本框"),
category("文本框及提交按钮"),
defaultvalue(30)]
public int showboxthreshold
{
получать
{
object obj=viewstate["showboxthreshold"];
return (obj==null)?30:(int)obj;
}
set{viewstate["showboxthreshold"]=value;}
}
#endregion
#region custominfosection
/// <summary>
/// 获取或设置显示用户自定义信息区的方式。
/// </summary>
/// <remarks>
/// 该属性值设为left或right时会在分页导航元素左边或右边划出一个专门的区域来显示有关用户自定义信息,设为never时不显示。
/// </remarks>
[browsable(true),
description("显示当前页和总页数信息,默认值为不显示,值为showcustominfosection.left时将显示在页索引前,为showcustominfosection.right时将显示在页索引后"),
defaultvalue(showcustominfosection.never),
category("自定义信息区")]
public showcustominfosection showcustominfosection
{
получать
{
object obj=viewstate["showcustominfosection"];
return (obj==null)?showcustominfosection.never:(showcustominfosection)obj;
}
set{viewstate["showcustominfosection"]=value;}
}
/// <summary>
/// 获取或设置用户自定义信息区文本的对齐方式。
/// </summary>
[browsable(true),
category("自定义信息区"),
defaultvalue(horizontalalign.left),
description("用户自定义信息区文本的对齐方式")]
public horizontalalign custominfotextalign
{
получать
{
object obj=viewstate["custominfotextalign"];
return (obj==null)?horizontalalign.left:(horizontalalign)obj;
}
набор
{
viewstate["custominfotextalign"]=value;
}
}
/// <summary>
/// 获取或设置用户自定义信息区的宽度。
/// </summary>
[browsable(true),
category("自定义信息区"),
defaultvalue(typeof(unit),"40%"),
description("用户自定义信息区的宽度")]
public unit custominfosectionwidth
{
получать
{
object obj=viewstate["custominfosectionwidth"];
return (obj==null)?unit.percentage(40):(unit)obj;
}
набор
{
viewstate["custominfosectionwidth"]=value;
}
}
/// <summary>
/// 获取或设置应用于用户自定义信息区的级联样式表类名。
/// </summary>
[browsable(true),
category("自定义信息区"),
defaultvalue(null),
Описание
public string custominfoclass
{
получать
{
object obj=viewstate["custominfoclass"];
return (obj==null)?cssclass:(string)obj;
}
набор
{
viewstate["custominfoclass"]=value;
}
}
/// <summary>
/// 获取或设置应用于用户自定义信息区的css样式文本。
/// </summary>
/// <value>字符串值,要应用于用户自定义信息区的css样式文本。</value>
[browsable(true),
category("自定义信息区"),
defaultvalue(null),
description("应用于用户自定义信息区的css样式文本")]
public string custominfostyle
{
получать
{
object obj=viewstate["custominfostyle"];
return (obj==null)?getstylestring():(string)obj;
}
набор
{
viewstate["custominfostyle"]=value;
}
}
/// <summary>
/// 获取或设置在显示在用户自定义信息区的用户自定义文本。
/// </summary>
[browsable(true),
category("自定义信息区"),
defaultvalue(null),
Описание
public string custominfotext
{
получать
{
return (string)viewstate["custominfotext"];
}
набор
{
viewstate["custominfotext"]=value;
}
}
#endregion
#region others
/// <summary>
/// 获取或设置一个值,该值指定是否总是显示aspnetpager分页按件,即使要分页的数据只有一页。
/// </summary>
/// <remarks>
/// 默认情况下,当要分页的数据小于两页时,aspnetpager不会在页面上显示任何内容,将此属性值设为true时,即使总页数只有一页,aspnetpager也将显示分页导航元素。
/// </remarks>
[browsable(true),
category("behavior"),
defaultvalue(false),
description("总是显示分页控件,即使要分页的数据只要一页")]
public bool alwaysshow
{
получать
{
object obj=viewstate["alwaysshow"];
return (obj==null)?false:(bool)obj;
}
набор
{
viewstate["alwaysshow"]=value;
}
}
/// <summary>
/// 获取或设置由aspnetpager 服务器控件在客户端呈现的级联样式表(css) 类。
/// </summary>
[browsable(true),
description("应用于控件的css类名"),
category("appearance"),
defaultvalue(null)]
public override string cssclass
{
get{return base.cssclass;}
набор
{
base.cssclass=value;
cssclassname=value;
}
}
/// <summary>
/// 获取或设置一个值,该值指示aspnetpager 服务器控件是否向发出请求的客户端保持自己的视图状态,该属性经重写后不允许设为false。
/// </summary>
/// <remarks><see cref="aspnetpager"/> 服务器控件将一些重要的分页信息保存在viewstate中,当使用url分页方式时,虽然视图状态在分页过程中没有任何作用,但若当前页需要回发,则必须启用视图状态以便分页控件能在页面回发后获取回发前的分页状态;当通过页面回发(postback)的方式来分页时,要使aspnetpager正常工作,必须启用视图状态。
/// <p><note>该属性并不能禁止用户用<![cdata[<%@page enableviewstate=false%> ]]>页指令来禁用整个页面的视图状态,当使用此指令并且设置aspnetpager通过页面回发来分页时,aspnetpager因为无法获取保存的信息而不能正常工作。</note></p></remarks>
[browsable(false),
description("是否启用控件的视图状态,该属性的值必须为true,不允许用户设置。"),
defaultvalue(true),
category("behavior")]
public override bool enableviewstate
{
получать
{
return base.enableviewstate;
}
набор
{
base.enableviewstate=true;
}
}
/// <summary>
/// 获取或设置当用户输入的页索引超出范围(大于最大页索引或小于最小页索引)时在客户端显示的错误信息。
/// </summary>
[browsable(true),
description("当用户输入的页索引超出范围(大于最大页索引或小于最小页索引)时在客户端显示的错误信息。"),
defaultvalue("页数超出范围!"),
category("data")]
public string pageindexoutofrangeerrorstring
{
получать
{
object obj=viewstate["pageindexoutofrangeerrorstring"];
return (obj==null)?"页数超出范围!":(string)obj;
}
набор
{
viewstate["pageindexoutofrangeerrorstring"]=value;
}
}
/// <summary>
/// 获取或设置当用户输入无效的页索引(负值或非数字)时在客户端显示的错误信息。
/// </summary>
[browsable(true),
description("当用户输入无效的页索引(负值或非数字)时在客户端显示的错误信息。"),
defaultvalue("页索引无效!"),
category("data")]
public string invalidpageindexerrorstring
{
получать
{
object obj=viewstate["invalidpageindexerrorstring"];
return (obj==null)?"页索引无效!":(string)obj;
}
набор
{
viewstate["invalidpageindexerrorstring"]=value;
}
}
#endregion
#endregion
#region control rendering logic
/// <summary>
/// 重写<see cref="system.web.ui.control.onload"/> 方法。
/// </summary>
/// <param name="e">包含事件数据的<see cref="eventargs"/> 对象。</param>
protected override void onload(eventargs e)
{
if(urlpaging)
{
currenturl=page.request.path;
urlparams=page.request.querystring;
string pageindex=page.request.querystring[urlpageindexname];
int index=1;
пытаться
{
index=int.parse(pageindex);
}
ловить {}
onpagechanged(new pagechangedeventargs(index));
}
еще
{
inputpageindex=page.request.form[this.uniqueid+"_input"];
}
base.onload(e);
}
/// <summary>
/// 重写<see cref="system.web.ui.control.onprerender"/>方法。
/// </summary>
/// <param name="e">包含事件数据的<see cref="eventargs"/> 对象。</param>
protected override void onprerender(eventargs e)
{
if(pagecount>1)
{
string checkscript="<script language="javascript">function docheck(el){var r=new regexp("^s*(d+)s*$");if(r.test(el.value)){if(regexp.$1<1||regexp.$1>"+pagecount.tostring()+"){alert(""+pageindexoutofrangeerrorstring+"");document.all['"+this.uniqueid+"_input'].select();return false;}return true;}alert(""+invalidpageindexerrorstring+"");document.all['"+this.uniqueid+"_input'].select();return false;}</script>";
if((showinputbox==showinputbox.always)||(showinputbox==showinputbox.auto&&pagecount>=showboxthreshold))
{
if(!page.isclientscriptblockregistered("checkinput"))
page.registerclientscriptblock("checkinput",checkscript);
string script="<script language="javascript" > <!-- nfunction buildurlstring(key,value){ var _key=key.tolowercase(); var prms=location.search; if(prms.length==0) return location.pathname+"?"+_key+"="+value; var params=prms.substring(1).split("&"); var newparam=""; var found=false; for(i=0;i<params.length;i++){ if(params[i].split("=")[0].tolowercase()==_key){ params[i]=_key+"="+value; found=true; break; } } if(found) return location.pathname+"?"+params.join("&"); else return location+"&"+_key+"="+value; }n//--> </script>";
if(!page.isclientscriptblockregistered("buildurlscript"))
page.registerclientscriptblock("buildurlscript",script);
}
}
base.onprerender(e);
}
/// <summary>
/// Rewrite the <see Cref = "System.web.ui.webControls.webControl.addattributestorender" method. Add the html attributes and styles that need to be presented to the specified <see Cref = "SYSTEM.WEB.HTMLTEXTEXT writer " />
/// </summary>
/// <param name="writer"></param>
protected override void addattributestorender(htmltextwriter writer)
{
if(this.page!=null)
this.page.verifyrenderinginserverform(this);
base.addattributestorender(writer);
}
/// <summary>
///重写<see cref="system.web.ui.webcontrols.webcontrol.renderbegintag"/> 方法,将<see cref="aspnetpager"/> 控件的html 开始标记输出到指定的<see cref="system.web.ui.htmltextwriter"/> 编写器中。
/// </summary>
///<param name="writer"><see cref="system.web.ui.htmltextwriter"/>,表示要在客户端呈现html 内容的输出流。</param>
public override void renderbegintag(htmltextwriter writer)
{
bool showpager=(pagecount>1||(pagecount<=1&&alwaysshow));
writer.writeline();
writer.write ("<! ------------------------------------------- ------------------------------------------------------ -----------")
writer.write("aspnetpager v4.3 start");
writer.writeline ("--------------------------------------------- ------------------------------------------------------ ------------------------------------------------------ ---------------
writer.write ("<! ------------------------------------------- ------------------------------------------------------ ------------------");
writer.write("copyright:2003 webdiyer(www.webdiyer.com)");
writer.write(" ---------------------");
writer.writeline(">");
base.renderbegintag(writer);
if(!showpager)
{
Writer.Write ("<! ------- because the total page is only one page, and the alwayShow attribute is set to false, the ASPNETPAGER does not show any content. If you want alwayShow attribute set to true! " );
writer.write("----->");
}
if((showcustominfosection==showcustominfosection.left||showcustominfosection==showcustominfosection.right)&&showpager)
{
writer.addattribute(htmltextwriterattribute.width,"100%");
writer.addattribute(htmltextwriterattribute.style,getstylestring());
if(height!=unit.empty)
writer.addstyleattribute(htmltextwriterstyle.height,height.tostring());
writer.addattribute(htmltextwriterattribute.border,"0");
writer.addattribute(htmltextwriterattribute.cellpadding,"0");
writer.addattribute(htmltextwriterattribute.cellspacing,"0");
writer.renderbegintag(htmltextwritertag.table);
writer.renderbegintag(htmltextwritertag.tr);
writecellattributes(writer,true);
writer.renderbegintag(htmltextwritertag.td);
}
}
/// <summary>
///重写<see cref="system.web.ui.webcontrols.webcontrol.renderendtag"/> 方法,将<see cref="aspnetpager"/> 控件的html 结束标记输出到指定的<see cref="system.web.ui.htmltextwriter"/> 编写器中。
/// </summary>
///<param name="writer"><see cref="system.web.ui.htmltextwriter"/>,表示要在客户端呈现html 内容的输出流。</param>
public override void renderendtag(htmltextwriter writer)
{
if((showcustominfosection==showcustominfosection.left||showcustominfosection==showcustominfosection.right)&&(pagecount>1||(pagecount<=1&&alwaysshow)))
{
writer.renderendtag();
writer.renderendtag();
writer.renderendtag();
}
base.renderendtag(writer);
writer.writeline();
writer.write("<!------------------------------- ");
writer.write("aspnetpager v4.3 end");
writer.write(" --------------------------------");
writer.writeline(">");
writer.writeline();
}
/// <summary>
/// Rewrite the <see Cref = "System.web.ui.webControls.webControl.RenderContents" method to present the content of the control to the specified <see cref = "System.web.ui.htmlTextWriter"/> In the устройство.
/// </summary>
/// <param name="writer"><see cref="system.web.ui.htmltextwriter"/>,表示要在客户端呈现html 内容的输出流。</param>
protected override void rendercontents(htmltextwriter writer)
{
if(pagecount<=1&&!alwaysshow)
Возвращаться;
if(showcustominfosection==showcustominfosection.left)
{
writer.write(custominfotext);
writer.renderendtag();
writecellattributes(writer,false);
writer.addattribute(htmltextwriterattribute.class,cssclass);
writer.renderbegintag(htmltextwritertag.td);
}
int midpage=(int)((currentpageindex-1)/numericbuttoncount);
int pageoffset=midpage*numericbuttoncount;
int endpage=((pageoffset+numericbuttoncount)>pagecount)?pagecount:(pageoffset+numericbuttoncount);
this.createnavigationbutton(writer,"first");
this.createnavigationbutton(writer,"prev");
if(showpageindex)
{
if(currentpageindex>numericbuttoncount)
createmorebutton(writer,pageoffset);
for(int i=pageoffset+1;i<=endpage;i++)
{
createnumericbutton(writer,i);
}
if(pagecount>numericbuttoncount&&endpage<pagecount)
createmorebutton(writer,endpage+1);
}
this.createnavigationbutton(writer,"next");
this.createnavigationbutton(writer,"last");
if((showinputbox==showinputbox.always)||(showinputbox==showinputbox.auto&&pagecount>=showboxthreshold))
{
writer.write(" ");
if(textbeforeinputbox!=null)
writer.write(textbeforeinputbox);
writer.addattribute(htmltextwriterattribute.type,"text");
writer.addstyleattribute(htmltextwriterstyle.width,"30px");
writer.addattribute(htmltextwriterattribute.value,currentpageindex.tostring());
if(inputboxstyle!=null&&inputboxstyle.trim().length>0)
writer.addattribute(htmltextwriterattribute.style,inputboxstyle);
if(inputboxclass!=null&&inputboxclass.trim().length>0)
writer.addattribute(htmltextwriterattribute.class,inputboxclass);
if(pagecount<=1&&alwaysshow)
writer.addattribute(htmltextwriterattribute.readonly,"true");
writer.addattribute(htmltextwriterattribute.name,this.uniqueid+"_input");
string scriptref="docheck(document.all['"+this.uniqueid+"_input'])";
string postref="if(event.keycode==13){if("+scriptref+")__dopostback('"+this.uniqueid+"',document.all['"+this.uniqueid+"_input'].value);else{event.returnvalue=false;}}";
string keydownscript="if(event.keycode==13){if("+scriptref+"){even
csover 发表于:2006.07.21 08:46 ::分类: ( asp.net ) ::阅读:(464次) :: 评论(0) :: 引用(0)
2006 年07 月20日, 星期四
一个简单的分页控件
采用datagrid的默任的分页方式分页,后来发现对于大的数据量速度很慢,net进程占用系统资源也很大,后来写了个分页的存储过程,每次取数据都只取当前页的,分页是分好了,但是发现翻页就没那么方便了,于是自己写了个简单的分页控件,代码如下(编译以后直接形成dll就可以用)。
sample code:
Использование системы;
Использование System.Web.UI;
Использование System.Web.UI.WebControls;
using system.componentmodel;
namespace pageinfocontrol
{
/// <summary>
///webcustomecontrol1的摘要说明
/// </summary>
[defaultproperty('totalrecord'),toolboxdata('<{0}:pageinfo runat=server></{0}:pageinfo>')]
public class pageinfo:system.web.ui.webcontrols.webcontrol,ipostbackeventhandler
{
#region construct method
/// <summary>
///构造函数
/// </summary>
public pageinfo():base(htmltextwritertag.div)
{
}
#endregion
#region variables and constants
public event eventhandler changepageclick;
private string _barbackgroudcolor='#f1f1f1';
private string _barlinkcolor='navy';
private string _barcurrentcolor='#eeeeee';
private int _totalrecord=0;
private int _totalpage=0;
private int _currentpageindex=1;
private int _itemsize=10;
#endregion
#region properties
[description('分页条背景色'),bindable(true),category('appearance'),defaultvalue('#f1f1f1')]
public string barbackgroundcolor
{
get{return _barbackgroundcolor;}
set{_barbackgroundcolor=value;}
}
[description('分页条带链接数字颜色'),bindable(true),category('appearance'),defaultvalue('navy')]
public string barlinkcolor
{
get{return _barlinkcolor;}
set{_barlinkcolor=value;}
}[description('分页条当前页数字颜色'),bindable(true),category('appearance'),defaultvalue('#eeeeee')]
public string barcurrentcolor
{
get{return _barcurrentcolor;}
set{_barcurrentcolor=value;}
} [description('总记录数'),bindable(false),category('behavior'),defaultvalue(0)]
public int totalrecord
{
get{return _totalrecord;}
набор
{
foreach(char c in system.convert.tostring(value))
{
if(!char.isnumber(c)
{
_totalrecord=0;
Перерыв;
}
_totalrecord=value;
}
} [description('每页显示记录数'),bindable(true),category('behavior'),defaultvalue(0)]
public int pagesize
{
get{return _pagesize;}
набор
{
foreach(char c in system.convert.tostring(value))
{
if(!char.isnumber(c))
{
_pagesize=0;
Перерыв;
}
}
_pagesize=value;
}
}[description('总页数'),bindable(true),category('behavior'),defaultvalue(0)]
public int totalpage
{
get{return _totalpage;}
}[description('数字规格'),bindable(true),category('behavior'),defaultvalue(10)]
public int itemsize
{
get{return _itemsize;}
набор
{
foreach(char c in system.convert.tostring(value))
{
if(!char.isnumber(c))
{
_itemsize=10;
Перерыв;
}
}
_itemsize=value;
}
}[description('当前页值'),bindable(true),category('behavior'),defaultvalue(1)]
public int currentpageindex
{
get{return _currentpageindex;}
set{_currentpageindex=value;}
}
#endregion
//定义div的样式
protected override void addattributestorender(htmltextwriter writer)
{
writer.addstyleattribute('white-space','nowrap');
writer.addstyleattribute('padding-top','2px');
writer.addstyleattribute('padding-bottom',2px');
writer.addstyleattribute('width',width.tostring());
writer.addstyleattribute('height',height.tostring());
base.addattributestorender(writer);
}
protected virtual void onpagechangeclick(eventargs e)
{
if(changepageclick!=null)
{
changepageclick(this,e);
}
} public void raisepostbackevent(string eventargument)
{
int pageindex=int.parse(eventargument);
this._currentpageindex=pageindex;
onpagechangeclick(new eventargs());
}
/// <summary>
///将此控件呈现给指定的输出参数
/// </summary>
///<param name='output'>要写出到的html编写器</param>
protected override void rendercontents(htmltextwriter output)
{this._totalpage=((this.totalrecord/pagesize)*this.pagesize==this.totalrecord)?(this.totalrecord/this.pagesize):((this.totalrecord/this.pagesize)+1);
int beginrecord=(this.currentpageindex-1)*this.pagesize+1;
int endrecord=this.currentpageindex*this.pagesize;
string pageinfo='[共<font color=#cc0000>'+this.totalpage.tostring()+'</font>页/当前第<font color=#cc0000>'+this.currentpageindex.tostring()+'</font>页共<font color=#cc0000>'+totalrecord.tostring()+'</font>条记录,当前记录数<font color=#cc0000>'+begingrecord.tostring()+'</font>到<font color=#cc0000>'+endrecord.tostring()+'</font>]';
string pageliststr='';
string pageindexcolor='#0000c0';
int singlenumber=this.totalpage-(totalpage/itemsize)*itemsize; //得到分页后的尾数(比如:总共58页,按10页规格显示,则尾数为8)
int intpageformax=(this.currentpageindex-1)/itemsize;
int minint=(1+itemsize*intpageformax);
int maxint=((intpageformax+1)*itemsize)>totalpage?totalpage:((intpageformax+1)*itemsize);
if(this.totalrecord==0||this.totalpage==0)
{
pageliststr='<font color='+pageindexcolor+'>0</font>';
pageliststr=pageliststr+'[共<font color=#cc0000>0</font>页/当前第<font color=#cc0000>0</font>页共<font color=#cc0000>0</font>条记录,当前记录数<font color=#cc0000>0</font>到<font color=#cc0000>0</font>]';
output.write(pageliststr);
}
еще
{
if(this.totalpage<=this.itemsize)
{
for(int i=1;i<=totalpage;i++)
{
pageindexcolor=currentpageindex==i?'#cc0000':'#0000c0';
if(currentpageindex==i)
pageliststr=pageliststr+'<a title='当前为第['+i+']页' href='#' id=''+this.uniqueid+''><font color='+pageindexcolor+'>'+i.tostring()+'</font></a>';
еще
pageliststr=pageliststr+'<a title='点击转到第['+i+']页' id=''+this.uniqueid+'' href=' javascript:'+page.getpostbackeventreference(this,i.tostring())+''><font color='+pageindexcolor+'>'+i.tostring()+'</font></a>';
}
pageliststr=pageliststr==''?'<font color='+pageindexcolor+'>0</font>':pageliststr;
pageliststr=pageliststr+''+pageinfo;
output.write(pageliststr);
}
еще
{
for(int i=minint;i<=maxint;i++)
{
pageindexcolor=currentpageindex==i?'#cc0000':'#0000c0';
if(currentpageindex==i)
pageliststr=pageliststr+'<a title='当前为第['+i+']页' href='#' id=''+this.uniqueid+''><font color='+pageindexcolor+'>'+i.tostring()+'</font></a>';
еще
pageliststr=pageliststr+'<a title='点击转到第['+i+']页' id=''+this.uniqueid+'' href=' javascript:'+page.getpostbackeventreference(this,i.tostring())+''><font color='+pageindexcolor+'>'+i.tostring()+'</font></a>';
}
//当当前页数小于itemsize且总的页数大于itemsize时
if(currentpageindex<=itemsize && totalpage>itemsize)
{
pageliststr=pageliststr+'<a id=''+this.uniqueid+'' title='点击转到第['+system.convert.tostring(itemsize+1)+']页' href=' javascript:'+page.getpostbackeventreference(this.system.convert.tostring(itemsize+1))+''>>></a>';
//当当前页数大于itemsize,且总的页数减去当前页数大于等于尾数值页数时
if(this.currentpageindex>itemsize && (totalpage-this.currentpageindex)>=singlenumber)
{
int multiminpageindex=(intpageformax*itemsize);
int multimaxpageindex=((intpageformax+1)*itemsize)+1;
pageliststr='<a id=''+this.uniqueid+'' title='点击转到第['+multiminpageindex+']页' href=' javascrcipt:'+page.getpostbackeventreference(this.multiminpageindex.tostring())+''><<</a>'+pageliststr.trim()+'<a id=''+this.uniqueid+'' title='点击转到第['+multimaxpageindex+']页' href=' javascript:'+page.getpostbackeventreference(this.multimaxpageindex.tostring())+''>>></a>';
}
//当当前页数大于itemsize,且总的页数减去当前页数大于等于尾数值页数时
if(currentpageindex>10 && (totalpage-currentpageindex)<singlenumber)
{
int multiminpageindex=(intpageformax * itemsize);
pageliststr='<a id=''+this.uniqueid+'' title='点击转到第['+multiminpageindex+']页' href=' javascript:'+page.getpostbackeventreference(this,multiminpageindex.tostring ())+''><<</a>'+pageliststr.trim();
}
pageliststr=pageliststr==''?'<font color='+pageindexcolor+'>0</font>':pageliststr;
pageliststr=pageliststr+''+pageinfo;
output.write(pageliststr);
}
}
base.rendercontents(output);
}
}
}
控件中有几个相关的属性,在使用的时候,只需要指定:totalrecord(总记录数)、pagesize(每页的数据记录数)、currentpageindex(当前页面值)、itemsize(分页条显示页面值的规格)
控件中有个changepageclick事件,可以利用“控件id.currentpageindex”属性来获取当前页面值。
注册会员,创建你的web开发资料库,