GridView用法

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.BindToGridView();
        }
    }
    //定义绑定
    private void BindToGridView()
    {
        SqlConnection conn = DB.Createconn();
        conn.Open();
        SqlDataAdapter sda = new SqlDataAdapter();
        sda.SelectCommand = new SqlCommand("select * from newstype order by typeID", conn);
        DataSet ds = new DataSet();
        sda.Fill(ds, "newstype");
        this.GridView1.DataKeyNames = new string[] { "typeid" };
        this.GridView1.DataSource = ds.Tables["newstype"];
        this.GridView1.DataBind();
        conn.Close();
    }
    //添加记录
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        SqlConnection conn = DB.Createconn();
        conn.Open();
        SqlCommand cmd = new SqlCommand("insert into newsType(typeName) values(\'"+this.txtTypeName.Text+"\')",conn);
        cmd.ExecuteNonQuery();
        conn.Close();
        this.txtTypeName.Text = "";
        this.BindToGridView();
    }
    //分页
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.GridView1.PageIndex = e.NewPageIndex;
        this.BindToGridView();
    }
    //编辑记录
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        this.GridView1.EditIndex = e.NewEditIndex;
        this.BindToGridView();
    }
    //更新记录
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        TextBox tb = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1");
        string typeId = this.GridView1.DataKeys[e.RowIndex].Values[0].ToString();
        SqlConnection conn = DB.Createconn();
        conn.Open();
        SqlCommand cmd = new SqlCommand("update newstype set typeName=\'"+tb.Text+"\' where typeid=" + typeId, conn);
        cmd.ExecuteNonQuery();
        conn.Close();
        this.GridView1.EditIndex = -1;
        this.BindToGridView();
    }
    //删除记录
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string typeId = this.GridView1.DataKeys[e.RowIndex].Values[0].ToString();
        SqlConnection conn = DB.Createconn();
        conn.Open();
        SqlCommand cmd = new SqlCommand("delete from newstype where typeid="+typeId, conn);
        cmd.ExecuteNonQuery();
        conn.Close();
      
        this.BindToGridView();
    }
    //编辑时的取消
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        this.GridView1.EditIndex = -1;
        this.BindToGridView();
    }
    //排序处理程序
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sortExpression = e.SortExpression;
        if (GridViewSortDirection == SortDirection.Ascending)
        {
            GridViewSortDirection = SortDirection.Descending;
            SortGridView(sortExpression, "DESC");
        }
        else
        {
            GridViewSortDirection = SortDirection.Ascending;
            SortGridView(sortExpression, "ASC");

        }


    }
    //存储选定列当前排序状态

     public SortDirection GridViewSortDirection
    {
        get
        {
            if (ViewState["sortDirection"] == null)
                ViewState["sortDirection"] = SortDirection.Ascending;
            return (SortDirection)ViewState["sortDirection"];
        }
        set { ViewState["sortDirection"] = value; }
     }
     /// 排序并绑定

     private void SortGridView(string sortExpression, string direction)
     {
         SqlConnection conn = DB.Createconn();
         conn.Open();
         SqlDataAdapter sda = new SqlDataAdapter();
         sda.SelectCommand = new SqlCommand("select * from newstype order by typeID", conn);
         DataSet ds = new DataSet();
         sda.Fill(ds, "newstype");
         DataTable dt = ds.Tables["newstype"];
        DataView dv = new DataView(dt);

        dv.Sort = sortExpression + " " + direction;

        GridView1.DataSource = dv;
         GridView1.DataBind();
         conn.Close();
    }

    //删除加确认
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[3].Attributes.Add("onclick","Javascript:return confirm(\'确认删除\\""+e.Row.Cells[1].Text+"\\"吗?\')");
        }
    }
}
--  作者:wxhui
--  发布时间:2006-12-20 14:51:25

--  

///定义变量

private String newsTypeId;

//定义属性

public string NewsTypeID

{

set{  //赋值

this.newTypeId=value;

}

}


--  作者:wxhui
--  发布时间:2007-1-27 14:48:24

--  

GRIDVIEW 绑定字段格式显示问题

GRIDVIEW中的绑定字段我要显示它的前10个字符,该怎么处理阿?
还有在绑定字段为true时显示其他文字,如“是”,为false显示“否"

答案:

1、<%# Convert.ToBoolean(Eval("sex")) ? "男" : "女" %>

2、如果Eval("prodname").ToString().Length小于10,那么你SubString出10个字符就会报错了。
<%# (Eval("prodname").ToString()).Length > 10 ? Eval("prodname").ToString().Substring(0, 10) : Eval("prodname").ToString() %>


--  作者:wxhui
--  发布时间:2007-1-27 15:08:57

--  DataFormatString
设AutoGenColumns为False,将DataField设为相关字段,然后设置DataFormatString

DataFormatString 属性语法如下:



DataFormatString="{0:格式字符串}"



我们知道在DataFormatString 中的 {0}
表示数据本身,而在冒号后面的格式字符串代表所们希望数据显示的格式;另外在指定的格式符号后可以指定小数所要显示的位数。例如原来的数据为
「1.56」,若格式设定为 {0:N1},则输出为「1.5」。其常用的数值格式如下表所示:



格式字符串 输入 结果

"{0:C}" 12345.6789 $12,345.68

"{0:C}" -12345.6789 ($12,345.68)

"{0:D}" 12345 12345

"{0:D8}" 12345 00012345

"{0:E}" 12345.6789 1234568E+004

"{0:E10}" 12345.6789 1.2345678900E+004

"{0:F}" 12345.6789 12345.68

"{0:F0}" 12345.6789 12346

"{0:G}" 12345.6789 12345.6789

"{0:G7}" 123456789 1.234568E8

"{0:N}" 12345.6789 12,345.68

"{0:N4}" 123456789 123,456,789.0000

"Total: {0:C}" 12345.6789 Total: $12345.68



其常用的日期格式如下表所示:



格式 说明 输出格式

d 精简日期格式 MM/dd/yyyy

D 详细日期格式 dddd, MMMM dd, yyyy

f 完整格式 (long date + short time) dddd, MMMM dd, yyyy HH:mm

F

完整日期时间格式

(long date + long time)

dddd, MMMM dd, yyyy HH:mm:ss

g 一般格式 (short date + short time) MM/dd/yyyy HH:mm

G 一般格式 (short date + long time) MM/dd/yyyy HH:mm:ss

m,M 月日格式 MMMM dd

s 适中日期时间格式 yyyy-MM-dd HH:mm:ss

t 精简时间格式 HH:mm

T 详细时间格式 HH:mm:ss
--  作者:wxhui
--  发布时间:2007-2-1 16:31:18

--  
鼠标移上的事件的添加
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes.Add("onclick", "window.open(\'detail.aspx?id=" + e.Row.Cells[0].Text + "\');");
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=\\"" + e.Row.Style["BACKGROUND-COLOR"] + "\\"");
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor=\\"" + "#EFF3F7" + "\\"");
            }
        }
    }
--  作者:wxhui
--  发布时间:2007-2-2 11:48:13

--  如何在gridview中每10行记录后增加一个空行
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowIndex >0 &&  (e.Row.RowIndex+1) % 10 == 0)
        {
            GridViewRow newRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal);
            newRow.Cells.Add(new TableCell());
            newRow.Cells[0].ColumnSpan = e.Row.Cells.Count;
            newRow.Cells[0].Text = "&nbsp;";
            this.GridView1.Controls[0].Controls.Add(newRow);
        }
    }


--  作者:wxhui
--  发布时间:2007-2-3 13:40:18

--  gridview 常用方法合集
在项目中主要用了gridview来显示数据,其中的方法都是常用的。
1、利用sqldatasource动态邦定数据,其中sqldatasource1是托放在页面的sqldatasource控件,将数据邦定到gridview1上面

    void gridviewband() {
            try
            {
                SqlDataSource1.ConnectionString = ConfigurationSettings.AppSettings["sqlconn"];
                SqlDataSource1.SelectCommand = squerysql;
                GridView1.DataSource = SqlDataSource1;
                GridView1.DataBind();
                //看有没有数据 如果没有数据 提示错误  lblresult的text的内容是错误信息  
                int count = GridView1.Rows.Count;
                if (count == 0) { lblresult.Visible = true; }
                else { lblresult.Visible = false; }
            }
            catch   (SqlException ex5)
            {
                //提示错误信息
            }
            finally {  
            }
    }

2、选择一行,获取关键字,然后传到其他页面

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {//选择某一行
        Session["selectkey"] = GridView1.SelectedDataKey.Value;
        Response.Redirect("~/employee/employeedetail.aspx");
    }

3、获取编辑行的关键字

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        //编辑修改
        Session["editkey"] = GridView1.DataKeys[e.NewEditIndex].Value.ToString();
        Response.Redirect("~/employee/employeeedit.aspx");
    }

4、删除一行,获取关键字。这个地方还是用rowdeleting 事件。

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
      
        String idno111 = GridView1.DataKeys[e.RowIndex].Value.ToString();
        SqlDataSource1.DeleteCommand = "delete from empinfo where empnum=\'" + idno111 + "\'"
            + "delete from employee where empnum=\'" + idno111 + "\'";
        //删除行
        if (e.RowIndex >= 0)
        {

            String connectstr = ConfigurationSettings.AppSettings["sqlconn"];
            SqlConnection sqlconn = new SqlConnection(connectstr);
            sqlconn.Open();
            SqlCommand comm = new SqlCommand(SqlDataSource1.DeleteCommand, sqlconn);
            comm.ExecuteNonQuery();
            sqlconn.Close();
        }
    }

5、删除前提示关键字,不仅仅是提示“确认删除吗?” 而是提示“确认删除关键字是***的数据吗?”

首先在aspx文件脚本里面要设置 重要看的是gridview的标签里面要有
DatakeyNames="关键字" 同时 CommandArgument=\'<%# Eval("departno") %>\'  这两处要填写

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
        CellPadding="4" DataKeyNames="departno" DataSourceID="SqlDataSource1" ForeColor="#333333"
        GridLines="None" OnDataBound="CustomersGridView_DataBound" OnRowDeleting="GridView1_RowDeleting"
        OnRowEditing="GridView1_RowEditing" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
        PageSize="15" Width="800px" OnRowDataBound="GridView1_RowDataBound">
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <Columns>
            <asp:BoundField DataField="departno" HeaderText="部门编号" SortExpression="departno" />
            <asp:BoundField DataField="father" HeaderText="父级部门" SortExpression="father" />
            <asp:BoundField DataField="departname" HeaderText="部门名称" SortExpression="departname" />
            <asp:BoundField DataField="person" HeaderText="联系人" SortExpression="person" />
            <asp:BoundField DataField="tel" HeaderText="固定电话" SortExpression="tel" />
            <asp:BoundField DataField="mobiletel" HeaderText="手机" SortExpression="mobiletel" />
            
            <asp:CommandField ButtonType="Image" HeaderText="查看" SelectImageUrl="~/icons/look.gif"
                SelectText="查看" ShowSelectButton="True">
                <HeaderStyle HorizontalAlign="Center" />
                <ItemStyle HorizontalAlign="Center" />
            </asp:CommandField>
            <asp:CommandField ButtonType="Image" EditImageUrl="~/icons/edit.gif" EditText="编辑"
                HeaderText="编辑" ShowEditButton="True">
                <HeaderStyle HorizontalAlign="Center" />
                <ItemStyle HorizontalAlign="Center" />
            </asp:CommandField>
            <asp:TemplateField HeaderText="删除" ShowHeader="False">
                <ItemStyle HorizontalAlign="Center" />
                <HeaderStyle HorizontalAlign="Center" />
                <ItemTemplate>
                    <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" CommandName="Delete"
                        ImageUrl="~/icons/delete.gif" CommandArgument=\'<%# Eval("departno") %>\' Text="删除" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        
        <PagerTemplate>
            <table width="100%">
                <tr>
                    <td width="70%">
                        <asp:Label ID="MessageLabel" runat="server" Font-Size="Larger" ForeColor="Black"
                            Text="页码:"></asp:Label>
                        <asp:DropDownList ID="PageDropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged">
                        </asp:DropDownList>
                        <asp:LinkButton ID="linkBtnFirst" runat="server" CommandArgument="First" CommandName="Page"
                            ForeColor="Black">首页</asp:LinkButton>
                        <asp:LinkButton ID="linkBtnPrev" runat="server" CommandArgument="Prev" CommandName="Page"
                            ForeColor="Black">上一页</asp:LinkButton>
                        <asp:LinkButton ID="linkBtnNext" runat="server" CommandArgument="Next" CommandName="Page"
                            ForeColor="Black">下一页</asp:LinkButton>
                        <asp:LinkButton ID="linkBtnLast" runat="server" CommandArgument="Last" CommandName="Page"
                            ForeColor="Black">末页</asp:LinkButton>
                    </td>
                    <td align="right" width="70%">
                        <asp:Label ID="CurrentPageLabel" runat="server" ForeColor="black"></asp:Label>
                    </td>
                </tr>
            </table>
        </PagerTemplate>
        
        <RowStyle BackColor="#EFF3FB" />
        <EditRowStyle BackColor="#2461BF" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <AlternatingRowStyle BackColor="White" />
    </asp:GridView>

然后在cs页面里填入事件:


    //删除某一行的时候要提示关键字  不仅是提示确认删除,departno是关键字
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            ImageButton l = (ImageButton)e.Row.FindControl("ImageButton1");
            l.Attributes.Add("onclick", "javascript:return " +
            "confirm(\'确认要删除部门编号为  " +
            DataBinder.Eval(e.Row.DataItem, "departno") + " 的部门吗?" + "\')");
        }
    }
}


这样删除的时候就能提示关键字了。


--  作者:wxhui
--  发布时间:2007-2-3 13:40:40

--  

6、显示页码
显示页码要在aspx代码里填入几行数据,上面的代码已经有了 重新写一下:
代码放在 </Columns>下面

        <PagerTemplate>
            <table width="100%">
                <tr>
                    <td width="70%">
                        <asp:Label ID="MessageLabel" runat="server" Font-Size="Larger" ForeColor="Black"
                            Text="页码:"></asp:Label>
                        <asp:DropDownList ID="PageDropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged">
                        </asp:DropDownList>
                        <asp:LinkButton ID="linkBtnFirst" runat="server" CommandArgument="First" CommandName="Page"
                            ForeColor="Black">首页</asp:LinkButton>
                        <asp:LinkButton ID="linkBtnPrev" runat="server" CommandArgument="Prev" CommandName="Page"
                            ForeColor="Black">上一页</asp:LinkButton>
                        <asp:LinkButton ID="linkBtnNext" runat="server" CommandArgument="Next" CommandName="Page"
                            ForeColor="Black">下一页</asp:LinkButton>
                        <asp:LinkButton ID="linkBtnLast" runat="server" CommandArgument="Last" CommandName="Page"
                            ForeColor="Black">末页</asp:LinkButton>
                    </td>
                    <td align="right" width="70%">
                        <asp:Label ID="CurrentPageLabel" runat="server" ForeColor="black"></asp:Label>
                    </td>
                </tr>
            </table>
        </PagerTemplate>

然后在gridview的标签里面填入

OnDataBound="CustomersGridView_DataBound"

位置看 5 的代码就可以了。
然后再 cs代码区加入如下代码

//显示页码

    protected void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
    {
        GridViewRow pagerRow = GridView1.BottomPagerRow;
        DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
        GridView1.PageIndex = pageList.SelectedIndex;
    }

    protected void CustomersGridView_DataBound(Object sender, EventArgs e)
    {
        try
        {
            GridViewRow pagerRow = GridView1.BottomPagerRow;

            LinkButton linkBtnFirst = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnFirst");
            LinkButton linkBtnPrev = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnPrev");
            LinkButton linkBtnNext = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnNext");
            LinkButton linkBtnLast = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnLast");

            if (GridView1.PageIndex == 0)
            {
                linkBtnFirst.Enabled = false;
                linkBtnPrev.Enabled = false;
            }
            else if (GridView1.PageIndex == GridView1.PageCount - 1)
            {
                linkBtnLast.Enabled = false;
                linkBtnNext.Enabled = false;
            }
            else if (GridView1.PageCount <= 0)
            {
                linkBtnFirst.Enabled = false;
                linkBtnPrev.Enabled = false;
                linkBtnNext.Enabled = false;
                linkBtnLast.Enabled = false;
            }
            DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
            Label pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");

            if (pageList != null)
            {
                for (int i = 0; i < GridView1.PageCount; i++)
                {
                    int pageNumber = i + 1;
                    ListItem item = new ListItem(pageNumber.ToString() + "/" + GridView1.PageCount.ToString(), pageNumber.ToString());
                    if (i == GridView1.PageIndex)
                    {
                        item.Selected = true;
                    }
                    pageList.Items.Add(item);
                }
            }
            if (pageLabel != null)
            {
                int currentPage = GridView1.PageIndex + 1;
                pageLabel.Text = "当前页: " + currentPage.ToString() +
                  " / " + GridView1.PageCount.ToString();
            }
        }
        catch
        {
            Response.Write("现在还没有该部门的记录!!");
        }
    }

如果发生异常,是应为没有数据。这时候可以在catch里面提示没有数据。这样就可以绑定页码了。
但是这样做的条件是没有把绑定数据放在 (!ispostback)里面,如果放在里面了,就会出问题
因为页面的代码实际上是控制显示第几页。但是绑定数据放在了!ispostback里面了,所以不能重新绑定。
这样的情况,要写那个绑定的方法。
然后在cs文件里写下面的代码:

    protected void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
    {
        GridViewRow pagerRow = GridView1.BottomPagerRow;
        DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
        GridView1.PageIndex = pageList.SelectedIndex;
        gridviewband();///重新绑定数据,这是特殊的地方
    }

    protected void CustomersGridView_DataBound(Object sender, EventArgs e)
    {
        try
        {
            GridViewRow pagerRow = GridView1.BottomPagerRow;

            LinkButton linkBtnFirst = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnFirst");
            LinkButton linkBtnPrev = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnPrev");
            LinkButton linkBtnNext = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnNext");
            LinkButton linkBtnLast = (LinkButton)pagerRow.Cells[0].FindControl("linkBtnLast");

            if (GridView1.PageIndex == 0)
            {
                linkBtnFirst.Enabled = false;
                linkBtnPrev.Enabled = false;
            }
            else if (GridView1.PageIndex == GridView1.PageCount - 1)
            {
                linkBtnLast.Enabled = false;
                linkBtnNext.Enabled = false;
            }
            else if (GridView1.PageCount <= 0)
            {
                linkBtnFirst.Enabled = false;
                linkBtnPrev.Enabled = false;
                linkBtnNext.Enabled = false;
                linkBtnLast.Enabled = false;
            }
            DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
            Label pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");

            if (pageList != null)
            {
                for (int i = 0; i < GridView1.PageCount; i++)
                {
                    int pageNumber = i + 1;
                    ListItem item = new ListItem(pageNumber.ToString() + "/" + GridView1.PageCount.ToString(), pageNumber.ToString());
                    if (i == GridView1.PageIndex)
                    {
                        item.Selected = true;
                    }
                    pageList.Items.Add(item);
                }
            }
            if (pageLabel != null)
            {
                int currentPage = GridView1.PageIndex + 1;
                pageLabel.Text = "当前页: " + currentPage.ToString() +
                  " / " + GridView1.PageCount.ToString();
            }
        }
        catch //(Exception ex5)
        {
            Response.Write("现在还没有该部门的记录!!");
        }
    }
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        
        GridView1.PageIndex = e.NewPageIndex;
        gridviewband();//重新绑定数据
    }

这样就可以显示了 如果按照前面的方法会提示没有  pageindexchanging事件。


--  作者:wxhui
--  发布时间:2007-5-22 14:38:20

--  ASP.NET中GridView的自定义分页

在ASP.NET 2.0种提供了GridView控件。该控件的分页比较方便,可以通过在Visual Studio .NET 2005种简单设置即可实现各种分页功能。

1. 默认分页方式

(1) 是否允许分页

GridView的AllowPaging属性。

(2) 每页记录数

GridView的PageSize

(3) 分页导航条形式

GridView的PagerSettings属性的Mode:Numeric,NextPrevious,NextPreviousFirstLast,NumericFirstLast。

2. 自定义分页

(1) 当前页

<asp:Label  ID="LabelCurrentPage" runat="server"
Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"></asp:Label>

(2) 总页数

<asp:Label ID="LabelPageCount" runat="server"
Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label>

(3) 首页、上一页、下一页、尾页

<asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page"
Visible="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">首页</asp:LinkButton>

<asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" CommandName="Page"
Visible="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>">上一页</asp:LinkButton>

<asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page"
Visible="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">下一页</asp:LinkButton>

<asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page"
Visible="<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>">尾页</asp:LinkButton>



--  作者:wxhui
--  发布时间:2007-5-22 14:39:53

--  关于GridView中自定义分页、单选、多选、排序、自增列的简单应用


screen.width-500)this.style.width=screen.width-500;" border=0>此主题相关图片如下:
按此在新窗口浏览图片

简单示例,代码如下,
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" target="_blank" >\' target=_new>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" target="_blank" >\' target=_new>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>


--  作者:wxhui
--  发布时间:2007-5-22 14:40:25

--  
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
posted @ 2008-01-24 18:23  Salesforce  阅读(1266)  评论(0编辑  收藏  举报