關于VS2005中GridView的自定義分頁,單選、多選、排序、自增列的簡單應用。
??? 多選時,只有全部選中時“多選”才選中。

????圖片效果:

???? 簡單示例,代碼如下,
??? fenpage.aspx的代碼
<%@?Page?Language="C#"?AutoEventWireup="true"?CodeFile="fenpage.aspx.cs"?Inherits="gridview_fenpage"?%>

<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html?xmlns="http://www.w3.org/1999/xhtml">
<head?runat="server">
????
<title></title>

????
<script?language="javascript"?type="text/javascript">????
????
//?判斷多選是否與選中項(沒有選中的返回false)
????function?slcNo_click()
????
{
????????
if?(document.form1.checkboxname.length)
????????
{
????????????
for?(var?i=0;i<document.form1.checkboxname.length;i++)
????????????
{
????????????????
if(document.form1.checkboxname[i].checked)
????????????????
{
????????????????????
return?true;
????????????????}

????????????}

????????}

????????
else
????????
{
????????????
if(document.form1.checkboxname.checked)
????????????
{
????????????????
return?true;
????????????}

????????}

????????alert(
"請選擇后再操作!");
????????
return?false;
????}

????
????
//?鼠標經過改變行的顏色
????if?(!objbeforeItem)
????
{
????????
var?objbeforeItem=null;
????????
var?objbeforeItembackgroundColor=null;
????}
????
????
function?ItemOver(obj)
????
{
????????
if(objbeforeItem)
????????
{
????????????objbeforeItem.style.backgroundColor?
=?objbeforeItembackgroundColor;
????????}

????????objbeforeItembackgroundColor?
=?obj.style.backgroundColor;
????????objbeforeItem?
=?obj;
????????obj.style.backgroundColor?
=?"#B9D1F3";?????
????}

????
//????????
?
????
//?多選的全選與取消
????function?checkJs(boolvalue)
????
{
????????
if(document.all.checkboxname.length>1)
????????
{
????????????
for(var?i=0;i<document.all.checkboxname.length;i++)
????????????
{
????????????????document.all.checkboxname[i].checked?
=?boolvalue;????????????
????????????}

????????}

????????
else
????????????document.all.checkboxname.checked?
=?boolvalue;
????}

????
//
????
????
//?只有全部選中時“全選”選中
????function?SingleCheckJs()
????
{
????????
var?flag1=false;
????????
var?flag2=false;
????????
????????
if?(document.form1.checkboxname.length)
????????
{
????????????
for?(var?i=0;i<document.form1.checkboxname.length;i++)
????????????
{
????????????????
if(document.form1.checkboxname[i].checked)
????????????????????flag1?
=?true;
????????????????
else
????????????????????flag2?
=?true;
????????????}

????????}

????????
else
????????
{
????????????
if(document.form1.checkboxname.checked)
????????????????flag1?
=?true;
????????????
else
????????????????flag2?
=?true;
????????}

????????
????????
if(flag1==true&&flag2==false)
????????????document.getElementById(
"chk").checked?=?true;
????????
else
????????????document.getElementById(
"chk").checked?=?false;
????}

????
//
????
</script>
</head>
<body>
????
<form?id="form1"?runat="server">
????????
<div>
????????????
<table?cellpadding="0"?cellspacing="0"?border="0"?width="80%"?style="font-size:?11px">
????????????????
<tr>
????????????????????
<td?align="center">
????????????????????????
<asp:GridView?ID="GridView1"?runat="server"?Width="100%"?CellPadding="4"?ForeColor="#333333"
????????????????????????????AutoGenerateColumns
="False"?AllowPaging="True"?PageSize="12"?BorderColor="Silver"
????????????????????????????BorderStyle
="Solid"?BorderWidth="1px"?OnRowDataBound="GridView1_RowDataBound"
????????????????????????????ShowFooter
="True"?EmptyDataText="沒有數據記錄!!"?AllowSorting="True"?OnSorting="GridView1_Sorting">
????????????????????????????
<Columns>
????????????????????????????????
<asp:BoundField?HeaderText="編號"?DataField="id"?Visible="False"?/>
????????????????????????????????
<asp:TemplateField?HeaderText="&lt;input?type='checkbox'?id='chk'?name='chk'?onclick='checkJs(this.checked);'??/&gt;全選"?FooterText="全選">
????????????????????????????????????
<ItemTemplate>
????????????????????????????????????????
<input?type="checkbox"?id="checkboxname"?name="checkboxname"?value='<%#?DataBinder.Eval(Container.DataItem,?"id")%>'?onclick='SingleCheckJs();'?/>
????????????????????????????????????
</ItemTemplate>
????????????????????????????????
</asp:TemplateField>
????????????????????????????????
<asp:TemplateField?HeaderText="單選"?FooterText="單選">
????????????????????????????????????
<ItemTemplate>
????????????????????????????????????????
<input?type="radio"?id="RadioName"?name="RadioName"?value='<%#?Eval("id")%>'?/>
????????????????????????????????????
</ItemTemplate>
????????????????????????????????
</asp:TemplateField>
????????????????????????????????
<asp:TemplateField?HeaderText="自增列"?FooterText="自增列">
????????????????????????????????????
<ItemTemplate>
????????????????????????????????????????
<%#?(Container.DataItemIndex+1).ToString()%>
????????????????????????????????????
</ItemTemplate>
????????????????????????????????
</asp:TemplateField>
????????????????????????????????
<asp:BoundField?HeaderText="姓名"?FooterText="姓名"?DataField="name"?SortExpression="name"?/>
????????????????????????????????
<asp:BoundField?HeaderText="身份證號"?FooterText="身份證號"?DataField="card"?SortExpression="card"?/>
????????????????????????????????
<asp:BoundField?HeaderText="價格"?FooterText="價格"?DataField="price"?DataFormatString="{0:¥#,##0.00}"
????????????????????????????????????HtmlEncode
="False"?SortExpression="price"?/>
????????????????????????????????
<asp:BoundField?HeaderText="數字"?FooterText="數字"?DataField="price"?DataFormatString="{0:0.00}"
????????????????????????????????????HtmlEncode
="False"?SortExpression="price"?/>
????????????????????????????????
<asp:BoundField?HeaderText="建立時間"?FooterText="建立時間"?DataField="createdate"?DataFormatString="{0:yyyy年MM月dd日?hh時mm分ss秒}"
????????????????????????????????????HtmlEncode
="False"?SortExpression="createdate"?/>
????????????????????????????
</Columns>
????????????????????????????
<RowStyle?BackColor="#F7F6F3"?ForeColor="#333333"?/>
????????????????????????????
<EditRowStyle?BackColor="#999999"?/>
????????????????????????????
<SelectedRowStyle?BackColor="#E2DED6"?Font-Bold="True"?ForeColor="#333333"?/>
????????????????????????????
<PagerStyle?BackColor="#284775"?ForeColor="White"?HorizontalAlign="Center"?/>
????????????????????????????
<AlternatingRowStyle?BackColor="White"?ForeColor="#284775"?/>
????????????????????????????
<PagerSettings?Visible="False"?/>
????????????????????????????
<FooterStyle?Font-Bold="True"?/>
????????????????????????????
<HeaderStyle?Font-Bold="False"?Font-Italic="False"?/>
????????????????????????
</asp:GridView>
????????????????????
</td>
????????????????
</tr>
????????????????
<tr>
????????????????????
<td?align="center"?style="height:?25px">
????????????????????????
<asp:LinkButton?ID="btnFirst"?CommandArgument="first"?OnClick="PagerButtonClick"
????????????????????????????runat
="server">首?頁</asp:LinkButton>
????????????????????????
<asp:LinkButton?ID="btnPrev"?CommandArgument="prev"?OnClick="PagerButtonClick"?runat="server">上一頁</asp:LinkButton>
????????????????????????
<asp:LinkButton?ID="btnNext"?CommandArgument="next"?OnClick="PagerButtonClick"?runat="server">下一頁</asp:LinkButton>
????????????????????????
<asp:LinkButton?ID="btnLast"?CommandArgument="last"?OnClick="PagerButtonClick"?runat="server">尾?頁</asp:LinkButton>
????????????????????????
<asp:Label?ID="LblCurrentIndex"?runat="server"></asp:Label>
????????????????????????
<asp:Label?ID="LblPageCount"?runat="server"></asp:Label>
????????????????????????
<asp:Label?ID="LblRecordCount"?runat="server"></asp:Label></td>
????????????????
</tr>
????????????????
<tr>
????????????????????
<td>
????????????????????????
<asp:Button?ID="Button2"?runat="server"?Text="checkbox得到選擇的行"?OnClick="Button2_Click">
????????????????????????
</asp:Button>
????????????????????????
<asp:Button?ID="Button1"?runat="server"?Text="radio得到選擇的行"?OnClick="Button1_Click"></asp:Button>
????????????????????
</td>
????????????????
</tr>
????????????
</table>
????????
</div>
????
</form>
</body>
</html>

???? fenpage.aspx.cs的代碼
using?System;
using?System.Data;
using?System.Configuration;
using?System.Collections;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Web.UI.HtmlControls;
using?System.Data.SqlClient;

public?partial?class?gridview_fenpage?:?System.Web.UI.Page
{
????
protected?void?Page_Load(object?sender,?EventArgs?e)
????
{
????????Button2.Attributes[
"onclick"]?=?"return?slcNo_click();";
????????GridViewBind(
"");
????}


????
private?void?GridViewBind(string?Sqlsort)
????
{
????????
string?connStr?=?ConfigurationManager.ConnectionStrings["ConnString1"].ConnectionString;
????????
string?SqlStr?=?"SELECT?*?FROM?test01?where?id<1000"?+?Sqlsort;
????????DataSet?ds?
=?new?DataSet();
????????
????????
try
????????
{
????????????SqlConnection?conn?
=?new?SqlConnection(connStr);
????????????
if?(conn.State.ToString()?==?"Closed")?conn.Open();

????????????SqlDataAdapter?da?
=?new?SqlDataAdapter(SqlStr,?conn);
????????????da.Fill(ds,?
"test01");????????????
????????????
if?(conn.State.ToString()?==?"Open")?conn.Close();

????????????GridView1.DataSource?
=?ds.Tables[0].DefaultView;
????????????GridView1.DataBind();

????????????LblCurrentIndex.Text?
=?"第?"?+?(GridView1.PageIndex?+?1).ToString()?+?"?頁";
????????????LblPageCount.Text?
=?"共?"?+?GridView1?.PageCount.ToString()+?"?頁";
????????????LblRecordCount.Text?
=?"總共?"+ds.Tables[0].Rows.Count.ToString()+"?條";
????????????
if?(ds.Tables[0].Rows.Count?==?0)
????????????
{
????????????????btnFirst.Visible?
=?false;
????????????????btnPrev.Visible?
=?false;
????????????????btnNext.Visible?
=?false;
????????????????btnLast.Visible?
=?false;

????????????????LblCurrentIndex.Visible?
=?false;
????????????????LblPageCount.Visible?
=?false;
????????????????LblRecordCount.Visible?
=?false;
????????????}

????????????
else?if?(GridView1.PageCount?==?1)
????????????
{
????????????????btnFirst.Visible?
=?false;
????????????????btnPrev.Visible?
=?false;
????????????????btnNext.Visible?
=?false;
????????????????btnLast.Visible?
=?false;
????????????}


????????????
//?計算生成分頁頁碼,分別為:"首?頁"?"上一頁"?"下一頁"?"尾?頁"
????????????btnFirst.CommandName?=?"1";
????????????btnPrev.CommandName?
=?(GridView1.PageIndex?==?0???"1"?:?GridView1.PageIndex.ToString());

????????????btnNext.CommandName?
=?(GridView1.PageCount?==?1???GridView1.PageCount.ToString()?:?(GridView1.PageIndex?+?2).ToString());
????????????btnLast.CommandName?
=?GridView1.PageCount.ToString();
????????????
//
????????}

????????
catch(Exception?ex)
????????
{
????????????Response.Write(
"數據庫錯誤,錯誤原因:"+ex.Message);
????????????Response.End();
????????}

????}

????
protected?void?PagerButtonClick(object?sender,?EventArgs?e)
????
{
????????GridView1.PageIndex?
=?Convert.ToInt32(((LinkButton)sender).CommandName)-1;
????????GridViewBind(
"");????????
????}


????
protected?void?GridView1_RowDataBound(object?sender,?GridViewRowEventArgs?e)
????
{
????????e.Row.Attributes[
"onmouseover"]?=?"ItemOver(this)";
????}


????
protected?void?Button2_Click(object?sender,?EventArgs?e)
????
{
????????
string?str="";?
????????
string?[]ckb=null;?

????????str
=Request.Form.Get("checkboxname");?
????????ckb
=str.Split(new?char[]{','});?

????????Response.Write(
"直接在頁面中得到的值為:"+str+"<br>");?

????????Response.Write(
"處理后存放在數組中,如下:<br>");?
????????
for(int?i=0;i<ckb.Length;i++)?
????????
{?
????????????Response.Write(
"ckb["+i+"]的值為:"+ckb[i]+"<br>");?
????????}
?
????}

????
protected?void?Button1_Click(object?sender,?EventArgs?e)
????
{
????????Response.Write(Request.Form.Get(
"RadioName"));
????}

????
protected?void?GridView1_Sorting(object?sender,?GridViewSortEventArgs?e)
????
{
????????
string?sql?=?"";

????????
if?(ViewState["SortDirection"]?==?null?||?ViewState["SortDirection"].ToString().CompareTo("")?==?0)
????????
{
????????????ViewState[
"SortDirection"]?=?"?desc";
????????}

????????
else
????????????ViewState[
"SortDirection"]?=?"";

????????sql?
=?"?order?by?"?+?e.SortExpression?+?ViewState["SortDirection"];
????????
????????GridViewBind(sql);
????}

}


??? 數據庫中表的生成代碼:
CREATE?TABLE?[dbo].[test01]?(
????
[id]?[decimal](18,?0)?IDENTITY?(1,?1)?NOT?NULL?,
????
[name]?[varchar]?(50)?COLLATE?Chinese_PRC_CI_AS?NULL?,
????
[card]?[varchar]?(50)?COLLATE?Chinese_PRC_CI_AS?NULL?,
????
[createdate]?[datetime]?NULL?
)?
ON?[PRIMARY]
GO

ALTER?TABLE?[dbo].[test01]?ADD?
????
CONSTRAINT?[DF_test01_createdate]?DEFAULT?(getdate())?FOR?[createdate],
????
CONSTRAINT?[PK_test01]?PRIMARY?KEY??CLUSTERED?
????(
????????
[id]
????)??
ON?[PRIMARY]?
GO

?

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1312814