您的位置:首页 > 其它

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

2010-01-14 17:05 976 查看
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 = "";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: