您的位置:首页 > 数据库

ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法

2010-10-22 10:04 771 查看
ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法
http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/15/5377.aspx
本范例已经收录在书本里面,敬请支持。

[b]ASP.NET案例精编[/b](清华大学出版社 / 作者MIS2000Lab)

http://www.china-pub.com/46063

2009/5/15上市

市场价 :¥59.80 RMB(人民幣)



这篇文章超闷!

因为全部都用后置程序代码(Code Behind)来作,

所以,GridView的「分页」、「编辑」、「删除」、「更新」......通通采用后置程序代码(自己动手写)

在许多网络论坛上,会有人发问这样的问题。因为入门书比较不会讲到这些,但学到一阵子之后,就会遇上相关问题了。

一般入门书,介绍 GridView + SqlDataSource都是靠精灵,设定画面一步一步地完成。

例如:初学者可以先看看这篇文章(PDF檔)......[b]文章下载[/b]

这个范例,请搭配我书本里面的 test数据表,可以当成 本书 10.3Ch 14的补充范例。

Ch 13/14这两章,是我书本里面的特色。



目前的ASP.NET 2.0 /3.5 /4.0的书籍,连ADO.NET都少见了(大多只讲 SqlDataSource),更别提到「手写」的ADO.NET程序。

=========================================================================================

建议:初学者勿看!

基础不好,看了会消化不良、拉肚子的。

先把基本功夫练好,下面的范例才会感到有用。

已经学会GridView的样版(Template)、SqlDataSource之后再看下去

底下的范例,因为自己写程序,会了解 GridView的各种事件。

例如:GridView是如何完成编辑、分页、更新等等动作,下面程序代码其实是完全公开了这些过程。

===================================================================================

第一,HTML画面设计。

只有一个 GridView,并启动「编辑」、「分页」等功能。重点是设定好DataKeys属性!

但画面上没有 SqlDataSource作资料系结。



第二,后置程序代码(Code Behind)。 VB版的范例

因为自己动手在后置程序代码里面,撰写 SqlDataSource,我上MSDN也没找到好的范例。

自己「硬Coding」,写得不好,请大家见谅。

C#版的范例 ----

[C#]ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法 (2010-10-22 10:15)

Sub myDBInit() '==== 自己写的程序====
'--------------------------------------------------
'----- 手动撰写 SqlDataSource -----
'--------------------------------------------------
Dim SqlDataSource1 As SqlDataSource= New SqlDataSource
'== 1.连结数据库的连接字符串 ConnectionString ,事先已经写在 Web.Config档案里面了==
SqlDataSource1.ConnectionString= System.Web.Configuration.WebConfigurationManager.ConnectionStrings("数据库连结字符串_ConnectionString").ConnectionString
'== 2.撰写SQL指令 ==
SqlDataSource1.SelectCommand ="SELECT * FROM [test]"
'== 3.执行SQL指令 .select() ==
SqlDataSource1.DataSourceMode= SqlDataSourceMode.DataSet

Dim args As New DataSourceSelectArguments
Dim dv As Data.DataView = SqlDataSource1.Select(args)

GridView1.DataSource = dv GridView1.DataBind()

SqlDataSource1.Dispose()
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
myDBInit()

Response.Write("第一次进入画面.....If Not Page.IsPostBackThen.....<br>")
Else
Response.Write("第<b>N</b>次进入画面.....<br>")
End If

'批注:不要小看这一段 IF判别式喔,不信的话请看这篇文章 ---- 自己动手写GridView的编辑/更新程序,但抓不到修改后的数据?
End Sub

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVale As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
GridView1.PageIndex = e.NewPageIndex
myDBInit()

Response.Write("GridView1_PageIndexChanging()....分页ing...<br>")
End Sub

Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs)Handles GridView1.RowEditing
GridView1.EditIndex = e.NewEditIndex
myDBInit()
Response.Write("GridView1_RowEditing()....进入编辑模式....<br>")
End Sub

Protected Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs)Handles GridView1.RowCancelingEdit
GridView1.EditIndex = -1
myDBInit()
Response.Write("GridView1_RowCancelingEdit()....离开(取消)编辑模式....<br>")
End Sub

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVale As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
'==这边的程序很难。要抓格子,还要自己算一下是第几格?请看本书P. 10-20页的图片与解说

Dim myTest1 As TextBox = GridView1.Rows(e.RowIndex).Cells(2).Controls(0)
Dim myTest2 As TextBox = GridView1.Rows(e.RowIndex).Cells(3).Controls(0)

Response.Write("GridView1_RowUpdating()....开始更新数据....<br>")

Dim my_test_time, my_title, my_summary, my_article As New TextBox
my_test_time = GridView1.Rows(e.RowIndex).Cells(2).Controls(0)
my_title = GridView1.Rows(e.RowIndex).Cells(3).Controls(0)
my_summary = GridView1.Rows(e.RowIndex).Cells(4).Controls(0)
my_article = GridView1.Rows(e.RowIndex).Cells(5).Controls(0)

Dim my_id As Integer = CInt(GridView1.DataKeys(e.RowIndex).Value) '====主索引键====

'==下面的程序,只是作SQL指令的更新动作而已

Dim SqlDataSource1 As SqlDataSource = New SqlDataSource
SqlDataSource1.ConnectionString= System.Web.Configuration.WebConfigurationManager.ConnectionStrings("数据库连结字符串_ConnectionString").ConnectionString

'== 设定SQL指令将会用到的参数 ==
SqlDataSource1.UpdateParameters.Add("id",my_id)
SqlDataSource1.UpdateParameters.Add("test_time",my_test_time.Text)
SqlDataSource1.UpdateParameters.Add("title",my_title.Text)
SqlDataSource1.UpdateParameters.Add("summary",my_summary.Text)
SqlDataSource1.UpdateParameters.Add("article",my_article.Text)

SqlDataSource1.UpdateCommand = "UPDATE [test] SET [test_time] = @test_time,[title] = @title, [summary] = @summary, [article] = @article WHERE [id] = @id"

SqlDataSource1.Update()

SqlDataSource1.Dispose()

'==========================================

'==== 离开编辑模式 ====
GridView1.EditIndex = -1

myDBInit()

End Sub

Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVale As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting

Dim SqlDataSource1 As SqlDataSource = New SqlDataSource
'== 连结数据库的连接字符串 ConnectionString ==
SqlDataSource1.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings("数据库连结字符串_ConnectionString").ConnectionString

Dim my_idAs Integer = CInt(GridView1.DataKeys(e.RowIndex).Value.ToString) '====主索引键====
SqlDataSource1.DeleteParameters.Add("id", my_id) '== 设定SQL指令将会用到的参数 ==

SqlDataSource1.DeleteCommand= "Delete from [test] WHERE [id] = @id"
SqlDataSource1.Delete()

Response.Write("***删除成功! ***")

myDBInit()
End Sub

C#版的范例 ----

[C#]ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码,兼论 SqlDataSource与UpdateParameter/DeleteParameter的用法 (2010-10-22 10:15)

2009/10/13补充:

特别感谢网友指正。空赃团长说:「GridView没有指定DataSourceID时,是不会执行-ed事件,只会执行-ing事件。」

关于上述的SqlDataSource作法,这篇文章写得也不错,请各位参考---- http://blog.sqlsky.com/article.asp?id=415 (C#语法)

============================================================================

考考您 (Q&A):

上面的各个事件里面,为何都要重复执行 myDBInit()?

如果不执行的话,会怎么样?

答案请看本书10.5,我用一整节的文章来作说明。......[2010 新书上市]ASP.NET 4.0专题实务(I) -- 入门实战篇

============================================================================

不是我藏私啦

一本书上限600页,我都写到快850页,还有好多东西塞不进去。

[b]ASP.NET案例精编[/b](清华大学出版社 / 作者MIS2000Lab)

http://www.china-pub.com/46063

2009/5/15上市

市场价 :¥59.80 RMB(人民幣)



这个范例,在以前ASP.NET 1.x版,是人人都会写的范例。

因为那个时候,没有 SqlDataSource这类的数据来源控件,很多事都要自己动手写。

到了ASP.NET 2.0以后,一切都方便、自动化了。书本也不提这一部份了,书本只谈新的控件,不会回头去谈一些基础。

(因为新东西太多,新的都谈不完,哪还有空回头谈别的)

「出来混,总是要还的」,写到(或学到)某一种程度,就会遇上了。

所以网络论坛上,还是很常见到这些问题。

这次公开了,基础够的话,研究一下就会懂。

如果不懂,也不要急,一定是有些基础还不稳固,有些该学的还没学到。

我的书本里面,第十章也有这个范例,但采用[b]DataSet+ DataAdapter[/b]来作(已经出书了,这范例暂不公开)

2009/11/9补充 -- 读者常见的问题,很值得思考!! 自己动手写GridView的编辑/更新程序,但抓不到修改后的数据?

如果您想参考SqlDataSourceSelectCommandSelectParameter的写法,请参考我的这篇文章:http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/25/3505.aspx

如果您想参考SqlDataSourceInsertCommandInsertParameter的写法,请参考我的这篇文章:http://www.dotblogs.com.tw/mis2000lab/archive/2009/09/30/sqldatasource_insert_insertparameters_20090930.aspx

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,文章(产品)的浏览次数 / 点阅数 / 点击次数,怎么作?

......文章 仍在增加中......

===========================================================================

新书([新书上市]ASP.NET 4.0专题实务(I) -- 入门实战篇)已经包含下列所有范例,







有读者希望看见 ListView、FormView、DetailsView,也都可以自己动手打造。

到了这篇文章,算是把这四大天王的范例,都提供出来了。

ListView ----

[习题]ListView自己写程序作「删除」(编辑与更新、新增)

[习题] ListView 数据更新前,先检查字段有无空白?

FormView ----

ADO.NET #9 FormView + SqlDataSource完全手写、后置程序代码!

GridView --

ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码!

[习题] GridView的排序(Sorting),自己动手写

DetailsView --

ADO.NET#10 DetailsView 变更模式(自己动手写程序)

===========================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: