您的位置:首页 > 编程语言 > ASP

【asp.net】GridView数据的编辑

2015-08-12 16:03 561 查看
·在新闻发布系统中,牛腩老师实现了点击编辑在表格中修改信息,使用的是Ajax,在总结GridView控件中突然发现了这个控件也有自带的编辑功能,于是研究了一段时间,虽然没有牛腩老师的方便和那样的效果,但是使用起来也是还可以的。

闲话少说,上代码

html代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridViewDemo.aspx.cs" Inherits="aspnetDemo.GridViewDemo" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>GridView的数据编辑</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <%--在属性中添加更新,取消和编辑事件,以及设置主键--%>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnRowEditing ="GridView1_RowEditing"   OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowUpdating="GridView1_RowUpdating1"  DataKeyNames="AdminID">
            <Columns>
                 <%--   <%--ID使用的是模板绑定,为的是不修改ID--%>
                <asp:TemplateField HeaderText="ID" HeaderStyle-CssClass="th_category"   >
                    <ItemTemplate>
                        [ <%# Eval("AdminID") %>]
                     </ItemTemplate>

<HeaderStyle CssClass="th_category"></HeaderStyle>
               </asp:TemplateField>
               <%-- 姓名使用简单绑定--%>
                <asp:BoundField DataField="AdminName" HeaderText="姓名" />
               <%-- 编辑,更新,取消事件--%>
               <asp:CommandField ShowEditButton="True" />
               
        </columns>
</asp:GridView>
</div>
    </form>
</body>
</html>


后台代码

<pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Web.Security;
namespace aspnetDemo
{
    public partial class GridViewDemo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                gridviewADO gd = new gridviewADO();
                DataTable dt = new DataTable();
                dt = gd.selectall();
                GridView1.DataSource = dt;
                Session["TaskTable"] = dt;//将所查内容保存到Session中,实际操作无此项
                GridView1.DataBind();
            }

        }
        //编辑
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;//获取所编辑的行的索引
            gridviewADO gd = new gridviewADO();
            DataTable dt = new DataTable();
            dt = gd.selectall();
            GridView1.DataSource = dt;
            GridView1.DataBind();
           

        }
       
        //更新
        protected void GridView1_RowUpdating1(object sender, GridViewUpdateEventArgs e)
        {
            
            DataTable dt = new DataTable();
            String ID = GridView1.DataKeys[e.RowIndex].Value.ToString();//获取编辑列的第一个数据
             String Name= ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString();//获取编辑列的第二个数据
            GridView1.EditIndex = -1;//取消编辑
            GridView1.DataSource = Session["TaskTable"];//重新获取数据
            GridView1.DataBind();//重新绑定数据
        }
        
        //取消编辑
        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;//取消编辑
            GridView1.DataSource = Session["TaskTable"];//重新获取数据
            GridView1.DataBind();//重新绑定数据
        }

    }
}




一些错误及处理方法



解决方法:产生这样的错误是因为,我并没有在GridView的属性中为“取消”添加事件。同样的,对于编辑和更新事件我们都是要添加的。



此行代码的作用是获得编辑行的主键的值,因为在编辑的过程中AdminID这个信息是不允许被编辑的。在属性中添加了DataKeyNames这个属性,是为了方便我们获取主键。如果显示中并没有显示主键使用这个方法就可以获取到主键。

PS:不允许修改的信息是使用模板方法绑定的,而允许修改的信息是使用简单绑定的。因为单击编辑时,只能对简单绑定的数据起作用。

一些说明:

1.在后台代码的更新事件中,已经可以明确的获取修改行的主键值和修改后的数据,但是在示例代码中并没有添加向数据库中更新信息的操作。

2.在取消编辑(更新中也需要取消编辑)时需要重新从数据库中获取数据并重新绑定。示例的代码是从session会话中得到的数据,所以更新修改后并没有显示修改后的数据。

总结

在实现这个功能的过程中有遇到了好多的错误,在解决这些错误的过错中,不断的调试代码让我对这个功能的实现的印象更加深刻了,同时当一个困扰你一天的错误被你解决了,我想这其中的心情大家都懂的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: