手工实现GridView排序、删除、编辑、新增数据功能

view plaincopy to clipboardprint?
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;  
using System.Data.Sql;  
/// <summary>  
/// 手动实现GridView的数据插入、更新、排序、删除功能  
/// 此作业烦恼我多日,终于完成,功能完全,异常处理也完善了,仅未作SQL注入处理  
/// 开发环境 VS2008 ,数据库名:manualDB,表名:student,更换环境,请注意修改表定义和数据库连接串  
/// </summary>  
public partial class _Default : System.Web.UI.Page   
{  
    /// <summary>  
    /// 页面预载入,初始化排序和数据  
    /// </summary>  
    /// <param name="sender"></param>  
    /// <param name="e"></param>  
    protected void Page_Load(object sender, EventArgs e)  
    {  
        if (!IsPostBack)  
        {  
            ViewState["SortOrder"] = "StudentId";//通过视图保存状态  
            ViewState["OrderDire"] = "ASC";   
            bind();  
        }  
    }  
    /// <summary>  
    /// 数据绑定方法,通过视图进行数据的排序  
    /// </summary>  
    protected void bind()   
    {  
        DataSet ds = new DataSet();  
        string commandText = "select * from student";  
        SqlConnection conn = getConn();  
        SqlDataAdapter sqlad = new SqlDataAdapter(commandText, conn);  
        try 
        {  
            sqlad.Fill(ds, "student");  
            DataView view = ds.Tables["student"].DefaultView;  
            string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];  
            view.Sort = sort;  
            GridView1.DataSource = view;  
            GridView1.DataKeyNames = new string[] { "StudentId" };   //标识出表主键,后面会用到取主键值  
            GridView1.DataBind();  
            sqlad.Dispose();     //适配器资源释放  
            conn.Close();  
        }  
        catch (Exception err)  
        {  
            Response.Write("读取数据失败,错误信息:" + err.Message);  
        }  
    }  
    /// <summary>  
    /// 行数据删除方法  
    /// </summary>  
    /// <param name="sender"></param>  
    /// <param name="e">e为触发删除事件的源</param>  
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)  
    {  
 
 
        SqlConnection conn = getConn();  
        string commandText = "delete student where StudentId='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";  
        SqlCommand sqlcom = new SqlCommand(commandText, conn);  
        /* 
         * 异常处理,下同:如果SQL顺利执行,但影响数据位0,则提示失败,否则打印错误信息 
         */ 
        try 
        {  
            conn.Open();  
            int i=sqlcom.ExecuteNonQuery();  
            if (i <= 0)   
Response.Write("<mce:script language=javascript><!--  
alert(创建失败!')   
// --></mce:script>");//查询结果影响数为0  
            conn.Close();  
        }  
        catch (Exception err)  
        {  
            Response.Write("删除失败,错误信息:" + err.Message);  
        }  
        bind();  
    }  
    /// <summary>  
    /// 行编辑方法,仅改变 GridView状态  
    /// </summary>  
    /// <param name="sender"></param>  
    /// <param name="e"></param>  
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)  
    {  
        GridView1.EditIndex = e.NewEditIndex;  
        bind();  
    }  
    /// <summary>  
    /// 行编辑取消方法  
    /// </summary>  
    /// <param name="sender"></param>  
    /// <param name="e"></param>  
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)  
    {  
        GridView1.EditIndex = -1;  
        bind();  
    }  
    /// <summary>  
    /// 行数据更新方法  
    /// </summary>  
    /// <param name="sender"></param>  
    /// <param name="e">通过e取得当前行的新值</param>  
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)  
    {  
 
        string name = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text.ToString().Trim();  
 
        string sex = ((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text.ToString().Trim();  
 
        string telephone = ((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text.ToString().Trim();   
 
        string comtext = "update student set name='"+name+"',sex='"+sex+"',telephone='"+telephone+"' where StudentId='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";   
        SqlConnection conn = getConn();  
        SqlCommand sqlcom = new SqlCommand(comtext,conn);  
        try 
        {  
            conn.Open();  
            int i=sqlcom.ExecuteNonQuery();  
            if (i <= 0) Response.Write("<mce:script language=javascript><!--  
alert(创建失败!')   
// --></mce:script>");  
            conn.Close();  
        }  
        catch (Exception err)  
        {  
            Response.Write("更新数据失败,错误信息:" + err.Message);  
        }  
          
        GridView1.EditIndex = -1;  
        bind();  
    }  
/// <summary>  
/// 排序方法,如果为升序排列,则按降序排,反之亦然  
/// </summary>  
/// <param name="sender"></param>  
/// <param name="e"></param>  
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)  
    {  
        string sPage = e.SortExpression;  
        if (ViewState["SortOrder"].ToString() == sPage)  
        {  
            if (ViewState["OrderDire"].ToString() == "Desc")  
                ViewState["OrderDire"] = "ASC";  
            else 
                ViewState["OrderDire"] = "Desc";  
        }  
        else 
        {  
            ViewState["SortOrder"] = e.SortExpression;  
        }  
        bind();   
    }  
    /// <summary>  
    /// 通用方法,获取一个数据库连接  
    /// </summary>  
    /// <returns></returns>  
    protected SqlConnection getConn()  
    {  
 
        string connString = "Data Source=MIRROR-PC//SQLEXPRESS;Initial Catalog=manualDB;Integrated Security=True;Pooling=False";  
        SqlConnection conn = new SqlConnection(connString);  
        return conn;  
    }  
    /// <summary>  
    /// 新增数据方法,增加完毕后重置文本框为空  
    /// </summary>  
    /// <param name="sender"></param>  
    /// <param name="e"></param>  
    protected void 新增_Click(object sender, EventArgs e)  
    {  
        string commdstr = "insert into student(name,sex,telephone) values('" + TextBox4.Text + "','" + TextBox2.Text + "','" + TextBox3.Text+ "')";  
        SqlConnection conn = getConn();  
        SqlCommand sqlcom = new SqlCommand(commdstr, conn);  
          
        try 
        {  
            conn.Open();  
            int i= sqlcom.ExecuteNonQuery();  
            if (i <= 0) Response.Write("<mce:script language=javascript><!--  
alert(创建失败!')   
// --></mce:script>");  
            conn.Close();  
        }  
        catch (Exception err)  
        {  
            Response.Write("创建失败,错误信息:"+err.Message);  
        }     
        bind();  
        TextBox3.Text = "";TextBox4.Text = ""; TextBox2.Text = "";  
    }  

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;
using System.Data.Sql;
/// <summary>
/// 手动实现GridView的数据插入、更新、排序、删除功能
/// 此作业烦恼我多日,终于完成,功能完全,异常处理也完善了,仅未作SQL注入处理
/// 开发环境 VS2008 ,数据库名:manualDB,表名:student,更换环境,请注意修改表定义和数据库连接串
/// </summary>
public partial class _Default : System.Web.UI.Page
{
    /// <summary>
    /// 页面预载入,初始化排序和数据
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ViewState["SortOrder"] = "StudentId";//通过视图保存状态
            ViewState["OrderDire"] = "ASC";
            bind();
        }
    }
    /// <summary>
    /// 数据绑定方法,通过视图进行数据的排序
    /// </summary>
    protected void bind()
    {
        DataSet ds = new DataSet();
        string commandText = "select * from student";
        SqlConnection conn = getConn();
        SqlDataAdapter sqlad = new SqlDataAdapter(commandText, conn);
        try
        {
            sqlad.Fill(ds, "student");
            DataView view = ds.Tables["student"].DefaultView;
            string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];
            view.Sort = sort;
            GridView1.DataSource = view;
            GridView1.DataKeyNames = new string[] { "StudentId" };   //标识出表主键,后面会用到取主键值
            GridView1.DataBind();
            sqlad.Dispose();     //适配器资源释放
            conn.Close();
        }
        catch (Exception err)
        {
            Response.Write("读取数据失败,错误信息:" + err.Message);
        }
    }
    /// <summary>
    /// 行数据删除方法
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e">e为触发删除事件的源</param>
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {


        SqlConnection conn = getConn();
        string commandText = "delete student where StudentId='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";
        SqlCommand sqlcom = new SqlCommand(commandText, conn);
        /*
         * 异常处理,下同:如果SQL顺利执行,但影响数据位0,则提示失败,否则打印错误信息
         */
        try
        {
            conn.Open();
            int i=sqlcom.ExecuteNonQuery();
            if (i <= 0)
Response.Write("<mce:script language=javascript><!--
alert(创建失败!')
// --></mce:script>");//查询结果影响数为0
            conn.Close();
        }
        catch (Exception err)
        {
            Response.Write("删除失败,错误信息:" + err.Message);
        }
        bind();
    }
    /// <summary>
    /// 行编辑方法,仅改变 GridView状态
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        bind();
    }
    /// <summary>
    /// 行编辑取消方法
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView1.EditIndex = -1;
        bind();
    }
    /// <summary>
    /// 行数据更新方法
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e">通过e取得当前行的新值</param>
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        string name = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text.ToString().Trim();

        string sex = ((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text.ToString().Trim();

        string telephone = ((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text.ToString().Trim();

        string comtext = "update student set name='"+name+"',sex='"+sex+"',telephone='"+telephone+"' where StudentId='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";
        SqlConnection conn = getConn();
        SqlCommand sqlcom = new SqlCommand(comtext,conn);
        try
        {
            conn.Open();
            int i=sqlcom.ExecuteNonQuery();
            if (i <= 0) Response.Write("<mce:script language=javascript><!--
alert(创建失败!')
// --></mce:script>");
            conn.Close();
        }
        catch (Exception err)
        {
            Response.Write("更新数据失败,错误信息:" + err.Message);
        }
       
        GridView1.EditIndex = -1;
        bind();
    }
/// <summary>
/// 排序方法,如果为升序排列,则按降序排,反之亦然
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sPage = e.SortExpression;
        if (ViewState["SortOrder"].ToString() == sPage)
        {
            if (ViewState["OrderDire"].ToString() == "Desc")
                ViewState["OrderDire"] = "ASC";
            else
                ViewState["OrderDire"] = "Desc";
        }
        else
        {
            ViewState["SortOrder"] = e.SortExpression;
        }
        bind();
    }
    /// <summary>
    /// 通用方法,获取一个数据库连接
    /// </summary>
    /// <returns></returns>
    protected SqlConnection getConn()
    {

        string connString = "Data Source=MIRROR-PC//SQLEXPRESS;Initial Catalog=manualDB;Integrated Security=True;Pooling=False";
        SqlConnection conn = new SqlConnection(connString);
        return conn;
    }
    /// <summary>
    /// 新增数据方法,增加完毕后重置文本框为空
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void 新增_Click(object sender, EventArgs e)
    {
        string commdstr = "insert into student(name,sex,telephone) values('" + TextBox4.Text + "','" + TextBox2.Text + "','" + TextBox3.Text+ "')";
        SqlConnection conn = getConn();
        SqlCommand sqlcom = new SqlCommand(commdstr, conn);
       
        try
        {
            conn.Open();
            int i= sqlcom.ExecuteNonQuery();
            if (i <= 0) Response.Write("<mce:script language=javascript><!--
alert(创建失败!')
// --></mce:script>");
            conn.Close();
        }
        catch (Exception err)
        {
            Response.Write("创建失败,错误信息:"+err.Message);
        }  
        bind();
        TextBox3.Text = "";TextBox4.Text = ""; TextBox2.Text = "";
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值