//このソースコードは、商業目的ではなく、参照のみを学習するためのものです。
//コントロールを変更して再構成する必要がある場合は、完全なソースコードの著作権情報を保持してください!
//コントロールのアップグレードと新しいコントロールリリース情報については、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 aspnetpagerサーバーコントロール
#regionコントロールの説明と例
/// <summary>
/// ASP.NET Webアプリケーションのデータページングデータのサーバーコントロールの場合。
/// </summary>
// <備考> Datagridコントロールとは異なり、AspNetPager Paging Control自体はデータを表示しませんが、ページの表示方法のみがコントロールとは関係ありません。このコントロールは、Datagrid、DataList、Repeater、およびカスタムコントロールをページングできます。大きい!
/// <p> ASPNETPAGER 2.0は、URLを介してページングの機能を新しく追加しました。これにより、訪問者は対応するURLを直接入力して任意のページにアクセスできます。また、検索エンジンは各ページを直接取得できます。 </p>
/// <p> AspnetPagerページングコントロールを使用するには、少なくとも<cref = "recordcount"/>属性をsee see see see see cref = "pageChanged"/>イベントの処理プログラムを指定して記述する必要があります。
// <cref = "recordcount"/>属性は、コンテンツでページ化するすべてのデータの総数を指定します。
/// <cref = "pageChanged"を参照してください/>イベント処理プログラムが指定されていない場合、ユーザーがページインデックステキストボックスのページナビゲーション要素またはハンドスタイル入力ページインデックスをクリックしてページを送信した場合。
/// aspnetpagerコントロールのページング方法は、基本的にDatagridのものと同じです。つまり、<cref = "pagechanged"/>イベント処理プログラムを参照してください。 「pagechededeventargs.newPageIndex」/>値は、<cref = "currentPageIndex"/> <see cref = "currentPageIndex"/>の属性を<see seeに割り当て、新しいデータとデータ表示コントロールを再バインドします。 </p> </remarks>
/// <例>次の例は、AspNetPagerを使用してデータグリッドをページする方法を示しています。
/// <Code> <!
/// <%@ページ言語= "c#"%>
/// <%@名前namespace = "system.data"%>
/// <%@名前namespace = "system.data.sqlclient"%>
/// <%@namespace = "system.configuration"%>
/// <%@Register Tagprefix = "webdiyer" namespace = "wuqi.webdiyer" Assembly = "aspnetpager"%>
/// <html>
/// <ヘッド>
/// <Title> webdiyer.comへようこそ</title>
/// <スクリプト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.executescalal();
// 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 changepage(オブジェクトSRC、pageChangedeventargs e)
/// {
/// pager.currentPageIndex = e.NewPageIndex;
/// binddata();
///}
/// </script>
/// <メタhttp-equiv = "content-language" content = "zh-cn">
/// <メタ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 = "left"
/// pagingbuttonspacing = "0"
/// showinputbox = "Always"
/// cssclass = "mypager"
/// horizontalally = "right"
/// onpagechanged = "changepage"
/// submitbuttontext = "turn to"
/// numericbuttontextformattring = "[{0}]"/>
/// </form>
/// </body>
/// </html>
///]]>
/// </code>
/// <p>この例で使用されるSQLサーバーストレージ手順:</p>
/// <Code>
/// <!
///手順GetNewsを作成します
///(@pagesize int、
/// @pageindex int、
@docountビット)
/// として
/// nocountを設定します
/// if(@docount = 1)
/// NewsからCount(ID)を選択します
/// それ以外
/// 始める
/// @indextableタブを宣言します
/// @pagelowerbound int
/// @pageupperbound intを宣言します
/// @pagelowerbound =(@pageindex-)*@pagesize
/// @[電子メール保護] [電子メール保護]
/// rowcount @pageupperboundを設定します
/// @indextable(nid)addtime descによるニュース注文からidを選択する
/// o.id、o.source、o.title、o.addtimeをselect o.id、o.title、o.addtime
///およびT.ID> @PageElowerBoundおよびT.ID <= @PageUpperBound Order
/// 終わり
/// nocountをオフにします
/// 行く
///]]>
/// </code> </example>
#endregion
[DefaultProperty( "Pagesize")]
[DefaultEvent( "PageChanged")]
[parsechildrn(false)]
[Persipchildren(false)]
[説明( "" asp.net webアプリケーションのページネーションコントロール ")]]]]]]]]]
[デザイナー(Typeof(pagerdesigner)]]
[ToolboxData(<{0}:AspnetPager runat = server> </{0}:aspnetpager> ")]]
パブリッククラスASPNETPAGER:パネル、InamingContainer、iPostbackeventhandler、ipostbackdatahandler
{{
プライベート文字列cssclassname;
private string urlpageindexname = "page";
private bool urlpaging = false;
プライベート文字列inputPageIndex;
private string currenturr = null;
private namevaluecollection urlparams = null;
///値の値を取得または設定します。
/// </summary>
[Browsable(True)、
カテゴリ( "ナビゲーションボタン")、defaultValue(true)、description( "マウスがナビゲーションボタンに留まるときに指定され、ディスプレイツールプロンプト"]]]]]]]]]
public bool shownavigationTooltip
{{
得る
{{
オブジェクトobj = viewstate ["shownavigationTooltip"];
return(obj == null)?(bool)obj;
}
セット
{{
ViewState ["shownavigationTooltip"] = value;
}
} /// <summary>
/// [ナビゲーション]ボタンツールを取得または設定して、テキスト形式をプロンプトします。
/// </summary>
[Browsable(True)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue( "ページ番号{0}"にターン)、
Descripting( "ページナビゲーションボタンツールリマインダーテキスト形式")]]
パブリック文字列
{{
得る
{{
オブジェクトobj = viewstate ["navigationTooltextFormAtstring"];
return(obj == null)?
}
セット
{{
文字列のtip = value;
if.trim()。
tip = "{0}";
ViewState
}
} /// <summary>
///値を取得または設定します。
/// </summary>
/// <lmarks>
///この値をtrueに設定し、画像ボタンを使用しない場合、ページインデックスボタン1、2、3などの値は、最初に漢字、2、3に置き換えられます。
/// </remarks>
[Browsable(True)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue(false)、
Descripting( "ページインデックス値ボタンが中国語の数字、2番目、3番目に置き換えられるかどうか」]]]
Public Bool ChinesepageIndex
{{
得る
{{
オブジェクトobj = viewstate ["chinesepageindex"];
return(obj == null)?(bool)obj;
}
セット
{{
viewstate ["chinesepageindex"] = value;
}
} /// <summary>
/// [番号]ナビゲーションボタンでテキストの表示形式を取得または設定します。
/// </summary>
/// <値>
///文字列、ページのページインデックス値にテキストの表示形式を指定します。デフォルト値は<cref = "string.empty"/>、つまりプロパティが設定されていないことを参照してください。 </value>
/// <lmarks>
/// numericbuttontextFormatstringプロパティを使用して、インデックス付き値の表示フォーマットを指定します。インデックスボタンが設定されていない場合、テキストは次のとおりです。
///値が「[{{0}]」に設定されている場合、インデックステキストは次のように表示されます:[1] [2] [3] ...、値を " - {0} - "に設定します次に、インデックステキストを次のようにします:-1--2- -3- ...
/// </remarks>
[Browsable(True)、
defaultValue( ""),,
カテゴリ(「ナビゲーションボタン」)、
Descripting( "ページインデックスのテキストの表示形式数値ボタン")]]
public string numericbuttontextformatstring
{{
得る
{{
オブジェクトobj = viewstate
return(obj == null)?
}
セット
{{
ViewState ["numericbuttontextextformatring"] = value;
}
} /// <summary>
///テキストがまだ画像であっても、ページングナビゲーションボタンの種類を取得または設定します。
/// </summary>
/// <lmarks>
///画像ボタンを使用するには、次の写真を準備する必要があります。0〜9の10値(ShowpageIndexがTrueに設定されている場合)、最初のページ、前のページ、次のページ、最後のページなどますます多くのページ(...)5つのボタンの写真(showfirstlastとshowprevnextがtrueに設定されている場合)、
//
///無効な最初のページ、最後のページ、次のページ、および最後のページの画像が通常のボタン画像とは異なる場合、障害状態のこれらの4つのボタンの写真を準備する必要があります。
/// <p> <b>画像ファイルの命名ルールは次のとおりです。</b> </p>
/// <p> 0から9の数値ボタン、画像の名前は「valut+buttunimageNameExtexexenses+buttunimageextentation」という名前です。
/// buttunimageextentingは、.gifや.jpgなどの画像ファイルの接尾辞名で、ブラウザに表示できる画像ファイルタイプです。たとえば、ページインデックス「1」の画像ファイルは、「1.gif」または「1.jpg」という名前を付けることができます。
/// 2つ以上の画像ファイルがある場合、buttunimageextent属性値を指定することにより、さまざまなセットのさまざまなセットの画像を区別できます。 「1.gif」、2。GIF」など、2番目の写真は「F」に設定されています。すぐ。 </p>
// <p>最初のページの[最初のページ]ボタンの写真は、「最後」から始まります。 ButtunimageNameExketnsionがButtunimageNameExtensionを使用するかどうかは、数値ボタンの設定と、より多くの写真があるかどうかによって異なります。 </p>
/// </remarks>
/// <例>
/// [画像]ボタンを使用している場合の次のコードフラグメントの例:
/// <p>
/// <Code> <!
/// <webdiyer:aspnetpager runat = "server"
/// id = "pager1"
/// onpagechanged = "changepage"
/// pagingbuttontype = "image"
/// imagepath = "images"
/// buttunimageNameExtent = "n"
/// DisabledButtonImageNameExtension = "G"
/// buttunimageextent = "gif"
/// cpibuttonimageNameExension = "r"
/// pagingbuttonspacing = 5/>
///]]>
/// </code>
/// </p>
/// </example>
[Browsable(True)、
defaultValue(pagingbuttontype.text)、
カテゴリ(「ナビゲーションボタン」)、
説明
Public PagingButtonType PagingButtisepe
{{
得る
{{
オブジェクトobj = viewstate
return(obj == null)?
}
セット
{{
ViewState
}
} /// <summary>
///ナビゲーション数値ボタンのタイプを取得または設定します。これは、PagingButtonTypeが画像に設定されている場合にのみ有効です。
/// </summary>
/// <lmarks>
/// pagingbuttonTypeを画像に設定すると、ページインデックス数値ボタンが画像を使用したくない場合、値をテキストに設定できます。 。
/// </remarks>
[Browsable(True)、
defaultValue(pagingbuttontype.text)、
カテゴリ(「ナビゲーションボタン」)、
Descripting( "Type of" Page Navigation Numeral Numericalボタン ")]]
public PagingButtonType numericButtonType
{{
得る
{{
オブジェクトobj = viewstate
return(obj == null)?
}
セット
{{
viewstate ["numericbuttontype"] = value;
}
} /// <summary>
///最初のページ、最後のページ、次のページ、最後のページのタイプを取得または設定します。
/// </summary>
/// <lmarks>
/// PagingButtonTypeを画像に設定しますが、最初の、次のページ、次のページ、最後のページに画像を使用したくない場合、値をテキストに設定できます。これにより、前の4つのボタンが前になります4つのボタンは、画像ボタンの代わりにテキストを使用します。
/// </remarks>
[Browsable(True)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue(pagingbuttontype.text)、
説明
Public PagingButtonType
{{
得る
{{
オブジェクトobj = viewstate ["NavigationButtonType"];
return(obj == null)?
}
セット
{{
ViewState ["NavigationButtonType"] = value;
}
} /// <summary>
///「より多くのページ」(...)ボタンのタイプを取得または設定します。これは、PagingButtonTypeが画像に設定されている場合にのみ有効です。
/// </summary>
/// <lmarks>
/// PagingButtonTypeを画像に設定しているが、より多くのページ(...)ボタンが画像を使用したくない場合、この値をテキストに設定できます。
/// </remarks>
[Browsable(True)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue(pagingbuttontype.text)、
Descripting( "more pages"(...)ボタンタイプ ")]]
Public PagingButtonType MoreButtonPe
{{
得る
{{
オブジェクトobj = viewstate ["morebuttisepe"];
return(obj == null)?
}
セット
{{
viewstate ["morebuttisepe"] = value;
}
} /// <summary>
///ページングナビゲーションボタン間の距離を取得または設定します。
/// </summary>
[Browsable(True)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue(typeof(unit)、 "5px")、
説明
パブリックユニットのページングバットンスケース
{{
得る
{{
オブジェクトobj = viewstate ["pagingbuttonspacing"];
return(obj == null)?
}
セット
{{
viewstate ["pagingbuttonspacing"] = value;
}
} /// <summary>
///値を取得または設定します。これは、最初のページボタンと最後のページボタンがページナビゲーション要素に表示されているかどうかを示します。
/// </summary>
[Browsable(True)、
説明
カテゴリ(「ナビゲーションボタン」)、
defaultValue(true)]
パブリックブールショーファーストラスト
{{
得る
{{
オブジェクトobj = viewstate ["showfirstlast"];
return(obj == null)?(bool)obj;
}
set {viewstate ["showfirtlast"] = value;}
} /// <summary>
///値を取得または設定すると、この値は、前のページと次のページがページナビゲーション要素に表示されるかどうかを示します。
/// </summary>
[Browsable(True)、
説明
カテゴリ(「ナビゲーションボタン」)、
defaultValue(true)]
パブリックブールshowprevnext
{{
得る
{{
オブジェクトobj = viewstate ["showprevnext"];
return(obj == null)?(bool)obj;
}
set {viewstate ["showprevnext"] = value;}
} /// <summary>
///ページナビゲーション要素に[インデックス値]ボタンが表示されているかどうかを示す値を取得または設定します。
/// </summary>
[Browsable(True)、
Descripting( "値ボタンがページナビゲーション要素に表示されているかどうか」)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue(true)]
Public Bool ShowPageIndex
{{
得る
{{
オブジェクトobj = viewstate ["showpageindex"];
return(obj == null)?(bool)obj;
}
set {viewstate ["showpageindex"] = value;}
} /// <summary>
///最初のページボタンで表示されるテキストに取得または設定します。
/// </summary>
[Browsable(True)、
説明(「最初のページボタンに表示されるテキスト」)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue( "<font face =" webdings "> 9 </font>")]]
public string firstpageText
{{
得る
{{
オブジェクトobj = viewstate ["firstPageText"];
return(obj == null)?
}
set {viewstate ["firstPageText"] = value;}
} /// <summary>
///前のページボタンに表示されたテキストに取得または設定します。
/// </summary>
[Browsable(True)、
説明(「前のページボタンに表示されたテキスト」)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue( "<font face =" webdings "> 3 </font>")]]
public string prevageText
{{
得る
{{
オブジェクトobj = viewState ["prevagetext"];
return(obj == null)?
}
set {viewstate ["prevpagetext"] = value;}
} /// <summary>
///次のページで表示されたテキストを取得または設定します。
/// </summary>
[Browsable(True)、
説明(「次のページボタンに表示されるテキスト」)、
カテゴリ(「ナビゲーションボタン」)、
defaultValue( "<font face =" webdings "> 4 </font>")]]
public string nextpageText
{{
得る
{{
オブジェクトobj = viewstate ["nextpageText"];
return(obj == null)?
}
set {viewstate ["nextpageText"] = value;}
} /// <summary>
///表示されたテキストを最後のページボタンとして取得または設定します。
/// </summary>
[Browsable(True)、
説明( "最後のページボタンに表示されるテキスト")、
カテゴリ(「ナビゲーションボタン」)、
defaultValue( "<font face =" webdings ">:</font>")]]
public string lastpageText
{{
得る
{{
オブジェクトobj = viewstate ["lastpageText"];
return(obj == null)?
}
set {viewstate ["lastpageText"] = value;}
} /// <summary>
/// <cref = "aspnetpager"/>コントロールのページナビゲーション要素に同時に表示される数値ボタンの数を取得または設定します。
/// </summary>
[Browsable(True)、
説明
カテゴリ(「ナビゲーションボタン」)、
defaultValue(10)]
public int numericbuttoncount
{{
得る
{{
オブジェクトobj = viewstate ["numericbuttoncount"];
return(obj == null):(int)obj;
}
set {viewstate ["numericbuttoncount"] = value;}
} /// <summary>
///無効なボタンが表示されているかどうかを指定する値を取得または設定します。
/// </summary>
/// <lmarks>
///この値は、現在のページが最初のページである場合、現在のページのボタンが無効になるかどうかを指定するために使用されます。最後のページボタンは無効になり、禁止されたボタンにはリンクがありません。ボタンをクリックしても効果がありません。
/// </remarks>
[Browsable(True)、
カテゴリ(「ナビゲーションボタン」)、
Descripting(「無効ボタンを表示するかどうか」)、
defaultValue(true)]
Public Bool ShowDisabledButtons
{{
得る
{{
オブジェクトobj = viewstate ["showdisabledbutton"];
return(obj == null)?(bool)obj;
}
セット
{{
ViewState ["showdisabledButtons"] = value;
}
}
#endregion
#region画像ボタン
/// <summary>
///画像ボタンを使用するときに、画像ファイルのパスを取得または設定します。
/// </summary>
[Browsable(True)、
カテゴリ(「画像ボタン」)、
Descripting( "画像ボタンを使用する場合、画像ファイルのパスを指定")、 ")、、、
defaultValue(null)]
パブリック文字列ImagePath
{{
得る
{{
文字列imgpath =(string)viewstate ["ImagePath"];
if(imgpath!= null)
imgpath = this.rsolveurl(imgpath);
Imgpathを返します。
}
セット
{{
文字列imgpath = value.trim()。
ViewState ["ImagePath"] =(imgpath.endswith( "/")?imgpath:imgpath+"/";
}
}
/// <summary>
/// GIFやJPGなどの画像のタイプである画像ボタンを使用するときに取得または設定すると、この値は画像ファイルの接尾辞名です。
/// </summary>
[Browsable(True)、
カテゴリ(「画像ボタン」)、
defaultValue( "。gif")、
説明( "gifやjpgなどの画像のタイプを使用する場合、この値は画像ファイルの接尾辞名です")]]
public string buttunimageextent
{{
得る
{{
オブジェクトobj = viewstate ["buttunimageextent"];
return(obj == null)?
}
セット
{{
文字列ext = value.trim();
viewstate ["buttunimageextension"] =(ext.startswith( "。")?ext:( "。"+ext);
}
}
/// <summary>
///カスタム画像ファイル名の接尾辞文字列を取得または設定して、さまざまなタイプのボタンを区別します。
/// </summary>
/// <Remarks> <lote>注:</not>この値はファイルの接尾辞ではなく、画像名に追加された文字列が:: ::
///現在、2つのボタンセットがあり、そのうちの1つは「1」にすることができます。他のセットの「1」の画像名は「1n.gif」になります。 nはbuttunimageNameExtensionです。 </remarks>
[Browsable(True)、
defaultValue(null)、
カテゴリ(「画像ボタン」)、
Descripting( "画像のButtunimageNamextecencyなどの「カスタマイズされた画像ファイル名の接尾辞)" 1f.gif "は" f "")]]]]]]]]]]]]]]]]]]]]]]]]
public string buttunimageEnameextension
{{
得る
{{
return(string)viewstate
}
セット
{{
ViewState ["buttunimageNameExtension"] = value;
}
}
/// <summary>
///現在のページインデックスボタンの画像名の接尾辞を取得または設定します。
/// </summary>
/// <lmarks>
/// <see cref = "pagingbuttonType"/>が画像に設定されている場合、この属性を使用すると、現在のページインデックスボタンを他のページとは異なる使用できるように、画像名の接尾辞文字を設定できます。インデックスボタン。値が設定されていない場合、デフォルト値は<cref = "buttunimageNameextent"/>、つまり、現在のページインデックスボタンは他のページインデックスボタンと同じ画像として使用されます。
/// </remarks>
[Browsable(True)、
defaultValue(null)、
カテゴリ(「画像ボタン」)、
Descripting( "現在のページインデックスボタンの画像名の教員文字列")]]
public string cpibuttonimagnameextension
{{
得る
{{
オブジェクトobj = viewstate
return(obj == null)?
}
セット
{{
viewstate ["cpibuttonimageNameExension"] = value;
}
}
/// <summary>
///無効なページナビゲーションボタンの写真名サフィックス文字列を取得または設定します。
/// </summary>
/// <lmarks>
/// <see cref = "pagingbuttontype"/>が画像に設定されている場合、この値を使用すると、ページナビゲーションボタンを設定できます(最初のページ、前のページ、前のページ、前のページ、前のページ、前のページ、次のページの画像ファイル名の接尾辞の文字列と最後のページの最後のページは、通常のページナビゲーションボタンとは異なる場合があります。この値が設定されていない場合、デフォルト値は<cref = "buttunimageRextent"/>、つまり、無効なページナビゲーションボタンが通常のページナビゲーションボタンと同じ画像を使用します。
/// </remarks>
[Browsable(True)、
defaultValue(null)、
カテゴリ(「画像ボタン」)、
Descripting( "無効なページナビゲーションボタンの画像名ボリューム文字列")]]
public string disabledbuttonimageNameextension
{{
得る
{{
オブジェクトobj = viewstate
return(obj == null)?
}
セット
{{
ViewState
}
}
/// <summary>
///画像ボタンを使用するときにアライメントメソッドを指定します。
/// </summary>
[Browsable(True)、
説明
defaultValue(ImageAlign.Baseline)、
カテゴリ( "画像ボタン")]]
public Imagealign buttunimagealign
{{
得る
{{
オブジェクトobj = viewstate ["buttunimagealign"];
return(obj == null)?
}
set {viewstate ["buttunimagealign"] = value;}
}
#endregion
#regionページング
/// <summary>
/// URLがページネーション情報を渡すことを有効にするかどうかを取得または設定します。
/// </summary>
/// <lmarks>
///ユーザーがURLを介してアクセスしたいページインデックスを渡すためのURLページング方法を有効にします。
///すべてのデータが初期値に復元されるか、各ページングで取得する必要があります。 URLページング法を使用すると、ページングコントロールに対する動的な変更の属性値がサポートされません。
///新しい属性値が一時的にURLを次のページに渡すことができないためです。
/// </remarks>
/// <例>次の例は、ASPNETPAGERのURLページング方法を使用してDatagridをページングする方法を示しています(アクセスデータベースを使用):
/// <Code> <!
/// <%@Register Tagprefix = "webdiyer" namespace = "wuqi.webdiyer" Assembly = "aspnetpager"%>
/// <%@名前namespace = "system.data.oledb"%>
/// <%@名前namespace = "system.data"%>
/// <%@ページ言語= "c#" debug = true%>
/// <html>
/// <ヘッド>
/// <Title> webdiyer.comへようこそ</title>
/// <スクリプト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( "wqnews from wqnews"、conn);
// conn.open();
/// pager.recordcount =(int)cmd.executescalal();
// conn.close();
/// binddata();
///}
///}
///
/// void binddata(){{)
/// cmd = new oledbcommand( "select newsid、hading、source、addtime by addtime design、conn); conn); conn); 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.pagesize、 "News");
/// dg.datasource = ds.tables ["news"];
/// dg.databind();
///}
///
/// void changepage(object src、pagechangedeventargs e){{
/// pager.currentPageIndex = e.NewPageIndex;
/// binddata();
///}
///
/// </script>
/// <メタhttp-equiv = "content-language" content = "zh-cn">
/// <メタ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ページングの例</h2>
/// <asp:datagrid id = "dg" runat = "server"
/// cellpadding = "4" align = "center"/>
///
/// <webdiyer:aspnetpager runat = "server" id = "pager"
/// onpagechanged = "changepage"
/// horizontalally = "center"
///
/// pagesize = "8"
/// showinputbox = "Always"
/// submitbuttonstyle = "border:1px solid#000066; height:20px; width:30px"
/// inputboxStyle = "border:1px#0000ff solid; text-align:center"
/// submitbuttontext = "turn to"
/// urlpaging = "true"
/// urlpageIndexName = "pageIndex"/>
/// </form>
/// </body>
/// </html>
///]]> </code>
/// </example>
[Browsable(True)、
カテゴリ(「ページング」)、
defaultValue(false)、
Descripting(「URLを使用してページにページに渡すかどうか」)]]]
パブリックブールUrlpaging
{{
得る
{{
urlpagingを返します。
}
セット
{{
urlpaging = value;
}
}
/// <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>
/// </remarks>
[Browsable(True)、
defaultValue( "page")、
カテゴリ(「ページング」)、
Descripting( "URLページングメソッドが有効になっている場合、ページインデックスのパラメーターの名前がURLに示す")]]]
public string urlpageIndexName
{{
get {return urlpageindexname;}
set {urlpageIndexName = value;}
}
/// <summary>
///現在の表示ページのインデックスを取得または設定します。
/// </summary>
/// <Remarksこの属性を使用して、現在表示されているページのデジタルインデックスに現在表示されているページを決定します。この属性は、プログラミングによって表示されるページを制御するためにも使用されます。
/// <p> <b>注:</b> datagridコントロールの現在のPageIndexとは異なり、AspNetPagerのCurrentPageIndexプロパティは1から始まります。 </p> </remarks>
[Readonly(True)、
閲覧可能(false)、
Descripting( "現在の表示ページのインデックス")、
カテゴリ(「ページング」)、
defaultValue(1)、
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]]
public int CurrentPageIndex
{{
得る
{{
オブジェクトcpage = viewstate ["currentPageIndex"];
int pindex =(cpage == null):(int)cpage;
if(pindex> pagecount && pagecount> 0)
pagecountを返します。
else if(pindex <1)
返品1;
pindexを返します。
}
セット
{{
int cpage = value;
if(cpage <1)
cpage = 1;
else if(cpage> this.pagecount)
cpage = this.pagecount;
viewstate ["currentPageIndex"] = cpage;
}
}
/// <summary>
///ページングする必要があるすべてのレコードの総数を取得または設定します。
/// </summary>
/// <lmarks>
///ページが初めてロードされると、ストレージ手順またはSQLステートメントに返されたデータテーブルのすべての総数のページングレコードの属性が与えられます。ページ上のページでは、返信時にViewStateから値が取得されるため、ページネーションが回避されるたびにデータベースへのアクセスを避けます。 ASPNETPAGERは、ページ化するデータの総数に基づいてすべてのデータに必要なページの総数を計算し、<cref = "pagesize"/>属性をページングに属します。つまり、<see cref = "pagecount"の値/>。
/// </remarks>
/// <例>
///以下の例は、SQLステートメントから返されたレコードの総数が属性に割り当てられる方法を示しています。
/// <p>
/// <Code> <!
/// <html>
/// <ヘッド>
/// <Title> webdiyer.comへようこそ</title>
/// <スクリプト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( "conn" from conn);
// conn.open();
/// pager.recordcount =(int)cmd.executescalal();
// 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 changepage(オブジェクトSRC、pageChangedeventargs e)
/// {
/// pager.currentPageIndex = e.NewPageIndex;
/// binddata();
///}
/// </script>
/// <メタhttp-equiv = "content-language" content = "zh-cn">
/// <メタ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 = "before"
/// showinputbox = "Always"
/// cssclass = "mypager"
/// horizontalally = "center"
/// onpagechanged = "changepage"/>
///
/// </form>
/// </body>
/// </html>
///]]>
/// </code> </p>
/// <p>この例で使用されるストレージ手順コードは次のとおりです。
/// <Code> <!
///手順を作成しますgetPagedNews
///(@pagesize int、
@pageindex int)
/// として
/// nocountを設定します
/// @indextableタブを宣言します
/// @pagelowerbound int
/// @pageupperbound intを宣言します
/// @pagelowerbound =(@pageindex-)*@pagesize
/// @[電子メール保護] [電子メール保護]
/// rowcount @pageupperboundを設定します
/// @indextable(nid)addtime descによるニュース注文からidを選択する
/// o.id、o.title、o.source、o.addtime from select o.id、o.source、o.addtimeを選択します
/// 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);
}
catch{}
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("<!-----因为总页数只有一页,并且alwaysshow属性设为false,aspnetpager不显示任何内容,若要在总页数只有一页的情况下显示aspnetpager,请将alwaysshow属性设为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开发资料库,