這兩天看見一本中文書,上面的範例頗為特別。

已經購買本書的讀者,這幾個範例,可以當成書本 14.2節 的後續補充文章   希望對大家有幫助。

---------------------------------------------------------------------------------------------------------------------

本範例採用的 test資料表,與本書範例相同,這些範例來不及在書上發表,如今在網路上為讀者介紹,當成售後服務。

請您具備本書 GridView第九章、ADO.NET第十三&十四章的基礎後,才來觀摩本範例。

--------------------------------------------------------------------------------------------------------------------- 

1.  首先,在畫面上,自己拉進幾個 TextBox,而不是套用現成的 DetailsView or FormView控制項。

      接著,設定好 SqlDataSource,並且自動產生SQL指令 ----Select / Insert / Update / Delete

      簡單的說,新增一筆資料(至資料表)的畫面,我自己手工完成。

      但後續的 Insert動作,由 SqlDataSource或 AccessDataSource「自動」幫我做好。

 


====以下的重點部份,是小弟個人親身測試。並且重點抓圖!不這樣作的話,根本作不出來!==========(Start)====

這時候, .aspx檔案的HTML碼,預設的SqlDataSource的 Insert參數是下面這個樣子。

       <InsertParameters>
                <asp:Parameter Name="test_time" Type="DateTime" />
                <asp:Parameter Name="class" Type="String" />
                <asp:Parameter Name="title" Type="String" />
                 ......省略..........
       </InsertParameters>

就算程式能運作,資料也無法新增到資料庫裡面!

 

該怎麼解決呢?    請注意看下面的設定畫面#1,不這樣作的話,程式不會正常運作

 

SqlDataSource裡面的每一個參數都要重新設定。如下圖的設定畫面#2。

逐一挑選每個 Web控制項(Web Control)ID名稱,逐一設定完成。

完成後,剛剛的 SqlDataSource裡面的 insert參數,必須變成下面這樣,程式才能運作!

 <asp:SqlDataSource ID="SqlDataSource1" runat="server"
            ConnectionString="<%$ ConnectionStrings:testConnectionString1 %>"
            InsertCommand="INSERT INTO [test] ([test_time], [class], [title], [summary], [article], [author]) VALUES (@test_time, @class, @title, @summary, @article, @author)" >

      <InsertParameters>     註解:看到沒,底下的參數產生變化,這樣才是正確的!
                <asp:ControlParameter ControlID="TextBox_test_time" Name="test_time"
                    PropertyName="Text" Type="DateTime" />
                <asp:ControlParameter ControlID="TextBox_Class" Name="class"
                    PropertyName="Text" Type="String" />
                <asp:ControlParameter ControlID="TextBox_title" Name="title"
                    PropertyName="Text" Type="String" />
                   ........省略........
       </InsertParameters>
 </asp:SqlDataSource>

====以上的重點部份,是小弟個人親身測試。並且重點抓圖!不這樣作的話,根本作不出來!==========(End)====

 

Q:請問你,為什麼要自己設定上面的步驟呢?以前用GridView / ListView都不需這些設定啊?

A:大型的資料繫結(資料綁定)控制項,例如:GridView / ListView / DetailsView等等,搭配SQlDataSource的時候,會自動做好每一個欄位的配對&設定,就算改用樣版(Template)也沒問題。自己不需要手動去修改。

而上面的範例,每一個TextBox控制項,搭配SqlDataSource的時候,無法完成自動配對,必須手動一一設定之!

 

2.  我們在後置程式碼(Code Behind),寫程式去控制,手動執行 SqlDataSource的  .Insert(),啟動新增的動作。

Protected Sub Button_Insert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button_Insert.Click

        '== 執行SQL指令 .Insert() ==   哈哈,後置程式只有一行!
        SqlDataSource1.Insert()

End Sub 

 

藍色小舖,也有人發問雷同的問題

http://www.blueshop.com.tw/board/show.asp?subcde=BRD200810242153360A7&fumcde=FUM20041006161839LRJ&rplcnt=4

就當成這一篇文章的課後習題,給大家自己作吧.....   答案在此,請下載DataBinding_4_Radio.rar

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

這個範例,可以讓我們更瞭解  SqlDataSource背後是怎麼運作的。

......正想整理起來,貼上BLOG與大家分享。

突然發現,微軟MSDN網站上的範例,跟書本裡面一模一樣。

那麼,我就省下這些書寫的功夫,轉貼網址給大家吧。

(嗯!我也會參考MSDN的文件,畢竟這是官方文件,最準確!
    但我至少會寫上「資料來源:微軟MSDN網站」,註明出處。   表示我是「引用」,而不是原作。

    引用學術規範,註明了出處,比較不會被人罵我抄襲。.....原來大師寫書時,所採用的範例,也是從微軟MSDN來的

 

這位大師的書本裡面,直接沿用MSDN範例。   畫面 & 後置程式碼,都一樣。

沒有介紹上面 "兩張設定圖片",對於用慣VS 2005 / VS 2008這種開發工具的人,

會一直寫錯程式喔!      請您特別注意!!!!!!

 

SqlDataSource的幾個事件,直接看他底下的範例:

這兩篇也一樣,可以參考。(這兩篇講基礎,請從此入門)

已經購買本書的讀者,這幾個範例,可以當成書本 14.2節 的後續補充文章   希望對大家有幫助。

 

與本文相關的習題,請看:

 

2009/9/30 針對本文的題目,我新增一個習題給大家參考 --

[習題] 補充本書第14章 (14-2)的範例--自己撰寫程式SqlDataSource「新增資料」,並且採用參數(InsertParameters)  

 

 

 

本系列共有下面文章:

範例:

 

 

 

 

今日值班正妹---- 仲間由紀惠   (很久以前抓的圖片,忘記來源在哪裡了.....是電影「忍」的劇照)


 

 

......  寄信給我    mis2000lab (at) 雅虎.com.台灣 ................................................................................................................
ASP.NET專題實務  (文魁出版,VB版 P8187 / C#版P09027

              下集已經出版囉~~~ASP.NET專題實務II:範例應用與4.0新功能

.............................................................................................................. 寄信給我    mis2000lab (at) 雅虎.com.台灣 ........