MIS2000 Lab. -- ASP.NET学习&分享 / ASP.NET案例精编(清华大学出版社)
您好,我来自台湾。很高兴与各位分享一些成果。希望对您有帮助。出版书籍是「ASP.NET案例精编 / 清华大学出版社」。

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

 http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/15/5377.aspx

 

 

本范例已经收录在书本里面,敬请支持。

 

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

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

2009/5/15上市

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

 

ASP.NET案例精编--适用于VS2005/2008

   

 

 

 

这篇文章超闷!

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

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

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

 

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

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

 

这个范例,请搭配我书本里面的 test数据表,可以当成 本书 10.3 Ch 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页,还有好多东西塞不进去。

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

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

2009/5/15上市

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

 

ASP.NET案例精编--适用于VS2005/2008

   

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

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

 

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

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

 

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

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

 

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

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

 

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

 

 

 

ADO.NET 共有下面文章:

 

 

 

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

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

     ASP.NET 4.0 專題實務(I)_VB  ASP.NET 4.0 專題實務(I)_C#

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

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

ListView ----

FormView ----

GridView --

DetailsView --

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

posted on 2010-10-22 10:04  MIS2000 Lab.  阅读(576)  评论(0编辑  收藏  举报


ASP.NET案例精编——适用于VS 2005/2008(配光盘)
 

当当网购买 http://product.dangdang.com/product.aspx?product_id=20583373&ref=search-1-pub