关于gridview分页及编辑的操作

关于gridview分页及编辑的操作

 

一:gridview分页

 

1、首先把gridview的allowPaging 设成true;

2、如果是前台绑定gridview的话也就是说前台有sqldatasource控件,到这一步就可以了.但是一般都是后面绑定数据源

     的 那么这时候得设置gridview事件PageIndexChangeing事件了

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        GridView1.DataSource = tm.SelectAll();
        GridView1.DataBind();
    }

    到这里vs自带默认分页格式已经完成(当然可以通过gridview的PageStyle和PageSetting来改变一些格式)

3、设置自定分页格式

    前台设好分页栏的模版:

<PagerTemplate>
                <asp:Table ID="Table1" Width="100%" runat="server">
                    <asp:TableRow>
                        <asp:TableCell Width="200px">
                            <asp:Label ID="lblMessage" ForeColor="Blue" Text="请选择页码:" runat="server" CssClass="bottom" />
                            <asp:DropDownList ID="myDropDownList" AutoPostBack="true" OnSelectedIndexChanged="ChangePage"
                                runat="server" />
                            <asp:LinkButton ID="btnPrev" Style="text-decoration: none" OnClick="ChangePage" runat="server"
                                Text="上一页">
                            </asp:LinkButton>
                            <asp:LinkButton ID="btnNext" Style="text-decoration: none" OnClick="ChangePage" runat="server"
                                Text="下一页">
                            </asp:LinkButton>
                        </asp:TableCell>
                        <asp:TableCell Width="200px" HorizontalAlign="right">
                            <asp:Label ID="lblPageLabel" ForeColor="Blue" runat="server" Width="200px" />
                        </asp:TableCell>
                    </asp:TableRow>
                </asp:Table>
            </PagerTemplate>

    设好模版后得为gridview加上DataBound事件/*在控件被数据绑定后触发*/

    后台事件代码

    

public partial class admin_adminDefault : System.Web.UI.Page
{
    public AdminsManage am = new AdminsManage();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["adminId"] != null)
        {
            if (!IsPostBack)
            {
                gridviewBind();
            }
        }
        else Response.Redirect("../login.aspx");
    }
    /// <summary>
    /// 绑定管理员列表
    /// </summary>
    public void gridviewBind()
    {
        DataTable gd = am.SelectAll();
        GridView1.DataSource = gd;
        GridView1.DataBind();
    }
    /// <summary>
    /// gridView1分页事件
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="e"></param>
    public void ChangePage(object obj, EventArgs e)
    {
        GridViewRow pagerRow = GridView1.BottomPagerRow;
        DropDownList pageList = (DropDownList)(pagerRow.Cells[0].FindControl("myDropDownList"));
        if (obj is LinkButton)
        {
            switch (((LinkButton)obj).ID)
            {
                case "btnPrev":
                    if (pageList.SelectedIndex > 0) pageList.SelectedIndex--;
                    break;
                case "btnNext":
                    if (pageList.SelectedIndex < pageList.Items.Count - 1)
                        pageList.SelectedIndex++;
                    break;
            }
        }
        GridView1.PageIndex = pageList.SelectedIndex;
        gridviewBind();
    }
    /// <summary>
    /// gridView 绑定后触发的事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void NewPage(object sender, EventArgs e)
    {
        GridViewRow pagerRow = GridView1.BottomPagerRow;
        DropDownList pageList =
           (DropDownList)(pagerRow.Cells[0].FindControl("myDropDownList"));
        Label pageLabel = (Label)(pagerRow.Cells[0].FindControl("lblPageLabel"));

        int i;
        for (i = 0; i < GridView1.PageCount; i++)
        {
            int pageNumber = i + 1;
            ListItem item = new ListItem(pageNumber.ToString());
            if (i == GridView1.PageIndex) item.Selected = true;
            pageList.Items.Add(item);
        }

        int currentPage = GridView1.PageIndex + 1;
        pageLabel.Text = "Page " + currentPage.ToString() +
           " of " + GridView1.PageCount.ToString();
    }
}

  当然还分假分页和真分页以上都是假分页,真分页即只从数据库中选择当前页的记录

  aspnetpager分页控件:http://www.webdiyer.com/AspNetPager/default.aspx

   SQL分页语句:http://niunan.iteye.com/blog/264197

 

二:gridview编辑

 

1、如果是前台绑定gridview的话也就是说前台有sqldatasource控件.那么在vs08中sqldatasource导向自动生成sql

     语言的时候有一步骤选高级勾选自动生成insert、update、delet语句 那么只要点击gridview右上角的小角

     gridview任务勾选启动编辑、删除就可以了(gridview中不支持插入)

2、但是一般都是后台绑定数据源那么得自己编写insert、update、delet语句。如果这时候不希望gridview绑定的时候

     不自动生成列的话,那么在gridview编辑列中加上BoundField(绑定到数据源中的字段)和CommanField(生成编按钮)

     到这里我们还得为CommanField生成的按钮绑定到SQL增删改语句.那么这时候我们得写gridview上的

     RowUpdateing、RowEditing、RowCancelingEdit等事件

   

using System;
using System.Data;
using System.Configuration;
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 _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            GridViewBind();
    }
    public SqlConnection GetCon()
    {
        //实例化SqlConnection对象
        SqlConnection sqlCon = new SqlConnection();
        //实例化SqlConnection对象连接数据库的字符串
        sqlCon.ConnectionString = "server=djd\\sql2005;uid=sa;pwd=sql2005;database=db_Student";
        return sqlCon;
    }
    public void GridViewBind()
    {
        SqlConnection myConn = GetCon();
        //定义SQL语句
        string SqlStr = "select * from tb_StuInfo";
        //实例化SqlDataAdapter对象
        SqlDataAdapter da = new SqlDataAdapter(SqlStr, myConn);
        //实例化数据集DataSet
        DataSet ds = new DataSet();
        da.Fill(ds, "tb_StuInfo");
        //绑定gridview1控件
        GridView1.DataSource = ds;//设置数据源,用于填充控件中的项的值列表
        GridView1.DataKeyNames = new string[] { "stuID" };
        GridView1.DataBind();//将控件及其所有子控件绑定到指定的数据源
    }
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        //设置GridView控件的编辑项的索引为选择的当前索引
        GridView1.EditIndex = e.NewEditIndex;
        //数据绑定
        GridViewBind();
    }
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        //设置GridView控件的编辑项的索引为-1,即取消编辑
        GridView1.EditIndex = -1;
        //数据绑定
        GridViewBind();
    }
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        //取得编辑行的关键字段的值
        string stuID = GridView1.DataKeys[e.RowIndex].Value.ToString();
        //取得文本框中输入的内容
        string stuName = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString();
        string stuSex = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString();
        string stuHobby = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString();
        string sqlStr = "update tb_StuInfo set stuName='" + stuName + "',stuSex='" + stuSex + "',stuHobby='" + stuHobby + "' where stuID=" + stuID;
        SqlConnection myConn = GetCon();
        myConn.Open();
        SqlCommand myCmd = new SqlCommand(sqlStr, myConn);
        myCmd.ExecuteNonQuery();
        myCmd.Dispose();
        myConn.Close();
        GridView1.EditIndex = -1;
        GridViewBind();
    }
}

3、上面那种方法是利用自带的CommanFiled但如果我们希望对这些编辑按钮自己定义并且自定义处于编辑行的样式 

     呢那么这时候我们得用到TemplateField(这里注意一下TemplateField中的编辑列中的button的CommandName

     的取值必须按规定取(edit update Cancel delet),取其它名则无效.如果是普通按钮的话则CommandName取除这四名字外的其它的名字 且定义RowCommand事件(普通的按钮事件)

gridview中TemplateField模版普通按钮触发事件代码(注意button的CommandName取名规范不要取四种系统规定的有特定意义的名字)如下

	//建立GridView Button按钮的RowCommand事件
	protected void gviewProduct_RowCommand(object sender, GridViewCommandEventArgs e)
	{
		//取得哪个Row的列索引
		int index = Convert.ToInt32(e.CommandArgument);
		GridViewRow selectedRow = gviewProduct.Rows[index];
		//取得该列Row的字段产品名称代号
		TableCell productName = selectedRow.Cells[1];
		//判断用户点击的是哪个种类的按钮
		switch (e.CommandName)
		{
			case "Order":
				//将订购的产品名称加入ListBox
				lbOrder.Items.Add(productName.Text);
				break;
			case "CancelOrder":
				//将取消的产品名称自ListBox移除
				if (lbOrder.Items.Count > 0)
				{
					int i = 0;
					while (i <= lbOrder.Items.Count - 1)
					{
						if (lbOrder.Items[i].Text == productName.Text)
						{
							lbOrder.Items.Remove(lbOrder.Items[i]);
							break;
						}
						else
						{
							i++;
						}
					}
				}
				break;
		}
	}

 接着上面的3说如果对这些编辑按钮自己定义并且自定义处于编辑行的样式 那么前台代码我们不能再用boundfield绑定字段了(自定义处于编辑行的样式)也不能用commanfield生成编辑更新删除按钮(编辑更新删除等按钮样式要自定义),所以都只能用TemplateField

前台代码:

        <asp:GridView ID="gviewProduct" runat="server" AutoGenerateColumns="False" BackColor="White"
            BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" Font-Size="10pt"
            AllowPaging="True" DataKeyNames="ProductID" OnPageIndexChanging="gviewProduct_PageIndexChanging"
            OnRowEditing="gviewProduct_RowEditing">
            <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
            <Columns>
                <asp:TemplateField HeaderText="ProductID" InsertVisible="False" SortExpression="ProductID">
                    <EditItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ProductID") %>'></asp:Label>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("ProductID") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="ProductName" SortExpression="ProductName">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("ProductName") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("ProductName") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("UnitPrice") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox4" runat="server" ReadOnly="True" Text='<%# Bind("UnitPrice") %>'
                            Width="50px"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="UnitsInStock" SortExpression="UnitsInStock">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("UnitsInStock") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox5" runat="server" ReadOnly="True" Text='<%# Bind("UnitsInStock") %>'
                            Width="50px"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Discontinued" SortExpression="Discontinued">
                    <EditItemTemplate>
                        <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Eval("Discontinued") %>' />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Discontinued") %>'
                            Enabled="false" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:Button ID="Button1" runat="server" CommandName="edit" Text="编辑" />
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:Button ID="Button1" runat="server" CommandName="Update" Text="更新" />&nbsp;<asp:Button
                            ID="Button2" runat="server" CommandName="Cancel" Text="取消" />
                    </EditItemTemplate>
                    <ControlStyle BackColor="#FFC0C0" />
                </asp:TemplateField>
            </Columns>
            <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
            <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
            <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
            <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
            <AlternatingRowStyle BackColor="#F7F7F7" />
        </asp:GridView>

 后台代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            gviewProductBind();

        }


    }

    private void gviewProductBind()
    {
        DataTable dt = sqlhelper.ExecuteQuery("SELECT * FROM [Products]", CommandType.Text);
        gviewProduct.DataSource = dt;
        gviewProduct.DataBind();
    }

    protected void gviewProduct_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gviewProduct.PageIndex = e.NewPageIndex;
        gviewProductBind();
    }

    protected void gviewProduct_OnRowCommand(object sender, GridViewEditEventArgs e)  //触发编辑事件
    {
        gviewProduct.EditIndex = e.NewEditIndex;
        gviewProductBind();                                                             //数据绑定
    }
    protected void gviewProduct_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gviewProduct.EditIndex = e.NewEditIndex;
        gviewProductBind();
    }

 上面只实现了编辑按钮 并且gviwproductbind()必须放在ispostback里面如果用模版的话.如果是用commanfield的话可以不用放在里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值