要看这个范例的解说,请看上一篇文章 ---
ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法 (2010-10-22 10:04)
建议:初学者勿看!
基础不好,看了会消化不良、拉肚子的。
先把基本功夫练好,下面的范例才会感到有用。
已经学会 GridView的样版(Template)、SqlDataSource之后再看下去
底下的范例,因为自己写程序,会了解 GridView的各种事件。
例如:GridView是如何完成编辑、分页、更新等等动作,下面程序代码其实是完全公开了这些过程。
C#版的范例如下:
protectedvoid myDBInit() //==== 自己写的程序 ====
{
//--------------------------------------------------
//----- 手动撰写 SqlDataSource -----
//--------------------------------------------------
SqlDataSourceSqlDataSource1 = new SqlDataSource();
//==自己手动撰写 SqlDataSource ,必须先写下面三行 ==
//== 1.连结数据库的连接字符串 ConnectionString ==
SqlDataSource1.ConnectionString= System.Web.Configuration.WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
//== 2.撰写SQL指令 ==
SqlDataSource1.SelectCommand= "SELECT * FROM [test]";
SqlDataSource1.DataSourceMode= SqlDataSourceMode.DataSet;
//== 如果 DataSourceMode属性设为 DataSet值,则 Select方法会传回 DataView对象。
//== 如果 DataSourceMode属性设为 DataReader值,则会传回 IDataReader物件。
// 当完成读取数据时,请关闭 IDataReader对象。
//== 3.执行SQL指令 .select()==
DataSourceSelectArgumentsargs = new DataSourceSelectArguments();
DataViewdv = (DataView)SqlDataSource1.Select(args);
//== 或是写成一行 Data.DataViewdv = (DataView)SqlDataSource1.Select(new DataSourceSelectArguments());
//== DataSourceSelectArguments提供一项机制,让数据系结控件于撷取数据时,用来向数据来源控件要求数据相关的作业。
//==http://msdn2.microsoft.com/zh-tw/library/system.web.ui.webcontrols.sqldatasource.select(VS.80).aspx
//=============================
GridView1.DataSource= dv;
GridView1.DataBind();
//=============================
SqlDataSource1.Dispose();
}
protectedvoid Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
myDBInit();
Response.Write("第一次进入画面.....if(!Page.IsPostBack).....<br>");
}
else
{
Response.Write("第<b>N</b>次进入画面.....<br>");
}
}
//==== 更新(Update) ============================================
protectedvoid GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//==批注:Cells(0)指的是: GridView第一格「更新、取消」的功能,"并非"数据库的字段!==
//==画面的GridView设定「DataKeyNames="id"」属性之后,「数据库索引键」这一格(以下例子为Cells[1])就会变成「只读」!不可抓取使用!==
Response.Write("GridView1_RowUpdating()....开始更新数据....<br>");
TextBoxmy_test_time, my_title, my_summary, my_article;
//先定义 TextBox对象!
my_test_time= (TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0];
my_title= (TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0];
my_summary= (TextBox)GridView1.Rows[e.RowIndex].Cells[5].Controls[0];
my_article= (TextBox)GridView1.Rows[e.RowIndex].Cells[6].Controls[0];
int my_id= Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value); //====主索引键====
SqlDataSourceSqlDataSource1 = new SqlDataSource();
//== 连结数据库的连接字符串 ConnectionString ==
SqlDataSource1.ConnectionString= System.Web.Configuration.WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
//SqlDataSource1.UpdateParameters.Clear();
//== 设定SQL指令将会用到的参数 ==
SqlDataSource1.UpdateParameters.Add("test_time", my_test_time.Text.ToString());
//下面的写法也可以!
// SqlDataSource1.UpdateParameters.Add(new Parameter("test_time",TypeCode.DateTime));
// SqlDataSource1.UpdateParameters["test_time"].DefaultValue= my_test_time.Text;
SqlDataSource1.UpdateParameters.Add("title",my_title.Text.ToString());
SqlDataSource1.UpdateParameters.Add("summary",my_summary.Text.ToString());
SqlDataSource1.UpdateParameters.Add("article",my_article.Text.ToString());
SqlDataSource1.UpdateParameters.Add("id",my_id.ToString());
//下面的写法也可以!
// SqlDataSource1.UpdateParameters.Add(new Parameter("id",TypeCode.Int32));
// SqlDataSource1.UpdateParameters["id"].DefaultValue= my_id.ToString();
SqlDataSource1.UpdateCommand= "UPDATE [test] SET [test_time] = @test_time, [title] = @title, [summary]= @summary, [article] = @article WHERE [id] = @id";
SqlDataSource1.Update(); //执行SQL指令--Update陈述句
SqlDataSource1.Dispose();
//====更新完成后,离开编辑模式 ====
GridView1.EditIndex= -1;
myDBInit();
}
//==== 编辑 ============================================
protectedvoid GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex= e.NewEditIndex;
myDBInit();
Response.Write("GridView1_RowEditing()....进入编辑模式....<br>");
}
protectedvoid GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex= -1;
myDBInit();
Response.Write("GridView1_RowCancelingEdit()....离开(取消)编辑模式....<br>");
}
//==== 删除 ============================================
protectedvoid GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
SqlDataSourceSqlDataSource1 = new SqlDataSource();
//== 连结数据库的连接字符串 ConnectionString ==
SqlDataSource1.ConnectionString= System.Web.Configuration.WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
int my_id= Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value); //====主索引键====
//== 设定SQL指令将会用到的参数 ==
SqlDataSource1.DeleteParameters.Add(newParameter("id", TypeCode.Int32));
SqlDataSource1.DeleteParameters["id"].DefaultValue= my_id.ToString();
SqlDataSource1.DeleteCommand= "Delete from [test] WHERE [id] = @id";
SqlDataSource1.Delete();
Response.Write("***删除成功! ***");
//----「删除」已经完成!!记得重新整理画面,重新加载资料----
myDBInit();
}
//==== 分页 ============================================
protectedvoid GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex= e.NewPageIndex;
myDBInit();
Response.Write("GridView1_PageIndexChanging()....分页ing...<br>");
}
protectedvoid GridView1_PageIndexChanged(object sender, EventArgs e)
{
Response.Write("GridView1_PageIndexChanged()....分页完成<br>");
}
=============================================================
本范例已经收录在书本里面,敬请支持。
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)
ADO.NET 共有下面文章:
- 初探ADO.NET #1,程序与数据库互动的四大步骤 (2010-10-20 08:55)
- 初探ADO.NET #2,DataReader 与 DataSet(资料集) (2010-10-20 08:58)
- ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法 (2010-10-22 10:04)(难度很高,初学者请略过)
- ADO.NET #4,自己设定输入画面,让SqlDataSource帮我们完成「新增」一笔数据 (2010-10-22 13:55)
- ADO.NET #5,自己设定画面,让SqlDataSource帮我们捞(呈现)数据 (2010-10-22 14:08)
- [习题]ADO.NET #6, DataSet如何新增一笔数据?
- [习题]ADO.NET #7,避免相同数据 重复输入(重复新增)
- [习题]ADO.NET #8,文章(产品)的浏览次数 / 点阅数 / 点击次数,怎么作?
- ......文章 仍在增加中......
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)