`
edu1211
  • 浏览: 2201 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于gridview分页及编辑的操作

    博客分类:
  • .NET
阅读更多

关于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的话可以不用放在里面

分享到:
评论

相关推荐

    asp.net中的GridView自定义分页及排序代码

    首先,我们要了解默认的GridView分页和排序机制。默认情况下,GridView会加载所有数据到内存中,然后根据用户的选择进行分页和排序,这可能导致性能问题,尤其是处理大量数据时。因此,自定义分页和排序是必要的,它...

    分页打印gridview

    在.NET Framework中,C#是一种常用的编程语言,用于开发Windows应用...以上就是关于“分页打印gridview”这个主题的主要知识点,通过这些技术,开发者可以在C#环境中有效地管理和打印大量数据,提供更好的用户体验。

    C#WinformGridView分页demo.rar

    在GridView中实现分页可以避免一次性加载所有数据导致的性能问题,同时让用户能够有条不紊地浏览和操作数据。这个Demo可能包含以下关键知识点: 1. **DataGridView控件**:在WinForms中,DataGridView是用于显示...

    Gridview分页

    总结,实现GridView分页的关键在于正确配置控件属性,编写后台代码来处理数据检索和分页事件,以及可能需要根据数据库版本调整SQL查询以支持分页。通过以上步骤,你可以为ASP.NET应用程序中的GridView创建功能完备的...

    GridView分页,编辑,删除,查看详情

    **一、GridView分页** 1. **启用分页**:在GridView控件中,通过设置`AllowPaging`属性为`true`来启用分页功能。 2. **设置每页显示条数**:使用`PageSize`属性来设定每一页显示的数据行数。 3. **分页控件**:默认...

    GridView高效分页示例

    在ASP.NET开发中,GridView控件是用于展示数据表格的常用组件,它可以轻松地与数据库交互,显示和编辑数据。然而,在处理大量数据时,传统的分页方式可能会导致性能问题,因为每次翻页都会从数据库中加载全部数据。...

    GridView系列---GridView分页

    在“GridView系列---GridView分页”这个主题中,我们将深入探讨如何利用GridView实现数据的分页显示,提升用户体验并优化服务器性能。 一、GridView概述 GridView控件允许开发人员以网格形式展示数据,支持多种内置...

    GridView控件的排序、分页、编辑功能实现实例

    GridView控件的排序、分页、编辑功能实现实例 GridView控件是 ASP.NET 中常用的数据GridView控件,它提供了丰富的功能来展示和操作数据。在本实例中,我们将展示如何实现GridView控件的排序、分页和编辑功能。 ...

    GridView编辑、删除、分页、控件嵌套等常见用法

    编辑操作通常涉及`RowEditing`、`RowUpdating`和`RowCancelingEdit`事件。在`RowUpdating`事件中,我们需要获取新值,更新数据源,并调用`DataBind()`方法重新绑定数据。 2. **GridView的删除功能**: 启用删除...

    gridview分页效果.rar

    它可以自动绑定到数据源,并提供排序、分页、编辑、插入和删除等操作。在默认情况下,如果数据量过大,GridView会自动启用分页功能,以便用户能够更有效地浏览数据。 二、GridView分页配置 1. 开启分页:在GridView...

    GridView分页系列

    "GridView分页系列"的主题涵盖了如何在GridView中实现高效且用户友好的分页功能。 一、GridView控件基础 GridView控件允许开发人员以网格形式显示来自数据源的数据,支持多种操作,如排序、编辑、删除等。在ASP.NET...

    一个非常优秀的基于GridView实现的分页控件源程序代码

    2. **分页功能**:默认的GridView分页可能不满足所有需求,例如,可能会需要自定义每页显示的记录数或者更美观的分页样式。这个源代码提供了这样的解决方案,通过扩展GridView的默认分页功能,使用户可以轻松地在...

    GridView高级操作,实现排序、分页、修改(点击便可修改)

    GridView分页** 分页功能可以减少网页加载的数据量,提高用户体验。首先,需要将`AllowPaging`属性设置为`true`,然后设置`PageSize`属性来指定每页显示的记录数。`PageIndexChanging`事件会在用户切换页码时触发,...

    GridView分页实现代码

    ### GridView分页实现代码 #### 知识点一:ASP.NET GridView 控件 - **简介**:`GridView`是ASP.NET中的一个数据绑定控件,用于以表格的形式展示数据源中的数据。它提供了多种功能,如排序、分页、编辑等。 - **...

    一个gridview数据绑定和分页

    在.NET开发环境中,GridView控件是ASP.NET Web Forms中常用的一种数据展示组件,它能够方便地将数据库中的数据以表格的形式展示出来,并且支持多种功能,如排序、筛选、编辑和分页等。本教程主要关注"gridview数据...

    gridview分页 增册改

    1. GridView分页: GridView的分页功能允许用户按页查看数据,而不是一次性加载所有记录,从而减轻服务器负担和提高页面加载速度。要启用分页,首先需要在GridView的属性中设置`AllowPaging`为`true`。然后,可以...

    GridView无代码分页排序

    GridView控件是ASP.NET中一个强大的数据展示工具,它能够以表格形式呈现数据库中的数据,同时提供了一系列内置功能,如排序、分页、编辑等,极大地简化了开发者的编码工作。 ### GridView无代码分页排序概述 #### ...

    GridView实现分页

    `GridView`是ASP.NET提供的一个用于显示数据集的强大控件,它能够自动创建表格布局来展示数据,并支持多种交互操作,如排序、分页、编辑等。其灵活性和易用性使得`GridView`成为数据展示的首选工具之一。 #### 二、...

    自定义分页及gridview列可拖动

    "自定义分页及gridview列可拖动"的主题着重于两个关键功能:一是实现分页功能,以便更好地管理和展示数据;二是让GridView的列宽可以自由拖动,以提高用户交互体验。 首先,让我们深入理解自定义分页。默认情况下,...

    gridview分页

    本文将详细介绍GridView分页的相关知识点。 1. GridView概述: GridView控件提供了一个灵活的表格布局,可以方便地绑定到数据源并展示数据。它支持排序、编辑、删除等多种功能,并且可以自定义样式和模板,以满足...

Global site tag (gtag.js) - Google Analytics