請您具備本書GridView第九章、ADO.NET第十三&十四章的基礎後,才來觀摩本範例。请您具备本书GridView第九章、ADO.NET第十三&十四章的基础后,才来观摩本范例。
--------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------
1. 首先,在畫面上, 自己拉進幾個TextBox, 而不是套用現成的DetailsView or FormView控制項。 1.首先,在画面上, 自己拉进几个TextBox, 而不是套用现成的DetailsView or FormView控制项。
接著,設定好SqlDataSource,並且自動產生SQL指令 ----Select / Insert / Update / Delete接着,设定好SqlDataSource,并且自动产生SQL指令 ----Select / Insert / Update / Delete
簡單的說, 新增一筆資料(至資料表)的畫面,我自己手工完成。简单的说, 新增一笔资料(至资料表)的画面,我自己手工完成。
但後續的Insert動作,由SqlDataSource或AccessDataSource「自動」幫我做好。 但后续的Insert动作,由SqlDataSource或AccessDataSource「自动」帮我做好。
====以下的重點部份,是小弟個人親身測試。 ====以下的重点部份,是小弟个人亲身测试。 並且重點抓圖! 并且重点抓图! 不這樣作的話,根本作不出來! 不这样作的话,根本作不出来! ==========(Start)==== ==========(Start)====
這時候, .aspx檔案的HTML碼, 預設的 SqlDataSource的Insert參數是下面這個樣子。这时候, .aspx档案的HTML码, 预设的 SqlDataSource的Insert参数是下面这个样子。
<InsertParameters> <InsertParameters>
<asp: Parameter Name="test_time" Type="DateTime" /> <asp: Parameter Name="test_time" Type="DateTime" />
<asp: Parameter Name="class" Type="String" /> <asp: Parameter Name="class" Type="String" />
<asp: Parameter Name="title" Type="String" /> <asp: Parameter Name="title" Type="String" />
......省略.......... ......省略..........
</InsertParameters> </InsertParameters>
就算程式能運作,資料也無法新增到資料庫裡面! 就算程式能运作,资料也无法新增到资料库里面!
該怎麼解決呢? 该怎么解决呢? 請注意看下面的設定畫面#1,不這樣作的話,程式不會正常運作 请注意看下面的设定画面#1,不这样作的话,程式不会正常运作
SqlDataSource裡面的每一個參數都要重新設定 。 SqlDataSource里面的每一个参数都要重新设定 。 如下圖的設定畫面#2。 如下图的设定画面#2。
逐一挑選每個Web控制項(Web Control)的ID名稱 ,逐一設定完成。 逐一挑选每个Web控制项(Web Control)的ID名称 ,逐一设定完成。
完成後,剛剛的SqlDataSource裡面的insert參數,必須變成下面這樣,程式才能運作!完成后,刚刚的SqlDataSource里面的insert参数,必须变成下面这样,程式才能运作!
<asp:SqlDataSource ID="SqlDataSource1" runat="server" <asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString1 %>" ConnectionString="<%$ ConnectionStrings:testConnectionString1 %>"
InsertCommand="INSERT INTO [test] ([test_time], [class], [title], [summary], [article], [author]) VALUES (@test_time, @class, @title, @summary, @article, @author)" > InsertCommand="INSERT INTO [test] ([test_time], [class], [title], [summary], [article], [author]) VALUES (@test_time, @class, @title, @summary, @article, @author)" >
<InsertParameters> 註解:看到沒,底下的參數產生變化,這樣才是正確的! <InsertParameters> 注解:看到没,底下的参数产生变化,这样才是正确的!
<asp: Control Parameter ControlID="TextBox_test_time" Name="test_time" <asp: Control Parameter ControlID="TextBox_test_time" Name="test_time"
PropertyName="Text" Type="DateTime" /> PropertyName="Text" Type="DateTime" />
<asp: Control Parameter ControlID="TextBox_Class" Name="class" <asp: Control Parameter ControlID="TextBox_Class" Name="class"
PropertyName="Text" Type="String" /> PropertyName="Text" Type="String" />
<asp: Control Parameter ControlID="TextBox_title" Name="title" <asp: Control Parameter ControlID="TextBox_title" Name="title"
PropertyName="Text" Type="String" /> PropertyName="Text" Type="String" />
........省略........ ........省略........
</InsertParameters> </InsertParameters>
</asp:SqlDataSource> </asp:SqlDataSource>
====以上的重點部份,是小弟個人親身測試。 ====以上的重点部份,是小弟个人亲身测试。 並且重點抓圖! 并且重点抓图! 不這樣作的話,根本作不出來! 不这样作的话,根本作不出来! ==========(End)==== ==========(End)====
Q:請問你,為什麼要自己設定上面的步驟呢? Q:请问你,为什么要自己设定上面的步骤呢? 以前用GridView / ListView都不需這些設定啊? 以前用GridView / ListView都不需这些设定啊?
A:大型的資料繫結(資料綁定)控制項,例如:GridView / ListView / DetailsView等等,搭配SQlDataSource的時候, 會自動做好每一個欄位的配對&設定,就算改用樣版(Template)也沒問題。 A:大型的资料系结(资料绑定)控制项,例如:GridView / ListView / DetailsView等等,搭配SQlDataSource的时候, 会自动做好每一个栏位的配对&设定,就算改用样版(Template )也没问题。 自己不需要手動去修改。 自己不需要手动去修改。
而上面的範例,每一個TextBox控制項,搭配SqlDataSource的時候, 無法完成自動配對,必須手動一一設定之! 而上面的范例,每一个TextBox控制项,搭配SqlDataSource的时候, 无法完成自动配对,必须手动一一设定之!
2. 我們在後置程式碼(Code Behind),寫程式去控制,手動執行SqlDataSource的 .Insert(),啟動新增的動作。 2.我们在后置程式码(Code Behind),写程式去控制,手动执行SqlDataSource的.Insert(),启动新增的动作。
Protected Sub Button_Insert_ Click (ByVal sender As Object, ByVal e As System.EventArgs) Handles Button_Insert.Click Protected Sub Button_Insert_ Click (ByVal sender As Object, ByVal e As System.EventArgs) Handles Button_Insert.Click
'== 執行SQL指令.Insert() == 哈哈,後置程式只有一行! '==执行SQL指令.Insert() ==哈哈,后置程式只有一行!
SqlDataSource1. Insert() SqlDataSource1. Insert()
End Sub End Sub
這個範例,可以讓我們更瞭解 SqlDataSource背後是怎麼運作的。这个范例,可以让我们更了解SqlDataSource背后是怎么运作的。 ......正想整理起來,貼上BLOG與大家分享。 ......正想整理起来,贴上BLOG与大家分享。
突然發現,微軟MSDN網站上的範例,跟書本裡面一模一樣。突然发现,微软MSDN网站上的范例,跟书本里面一模一样。
那麼,我就省下這些書寫的功夫,轉貼網址給大家吧。那么,我就省下这些书写的功夫,转贴网址给大家吧。
(嗯!我也會參考MSDN的文件,畢竟這是官方文件,最準確! (嗯!我也会参考MSDN的文件,毕竟这是官方文件,最准确!
但我至少會寫上「資料來源:微軟MSDN網站」,註明出處。 但我至少会写上「资料来源:微软MSDN网站」,注明出处。 表示我是「引用」,而不是原作。 表示我是「引用」,而不是原作。
引用學術規範,註明了出處,比較不會被人罵我抄襲。 引用学术规范,注明了出处,比较不会被人骂我抄袭。
.....原來大師寫書時,所採用的範例,也是從微軟MSDN來的 .....原来大师写书时,所采用的范例,也是从微软MSDN来的 ) )
這位大師的書本裡面,直接沿用MSDN範例。这位大师的书本里面,直接沿用MSDN范例。 畫面& 後置程式碼,都一樣。画面&后置程式码,都一样。
沒有介紹上面"兩張設定圖片",對於用慣VS 2005 / VS 2008這種開發工具的人, 没有介绍上面"两张设定图片",对于用惯VS 2005 / VS 2008这种开发工具的人,
會一直寫錯程式喔! 会一直写错程式喔! 請您特別注意! 请您特别注意! ! ! ! ! ! ! ! ! ! !
SqlDataSource的幾個事件,直接看他底下的範例: SqlDataSource的几个事件,直接看他底下的范例:
- 新 增http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.sqldatasource.inserting.aspx 新增http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.sqldatasource.inserting.aspx
- 更 新http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.sqldatasource.updating.aspx 更新http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.sqldatasource.updating.aspx
- 刪 除http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.sqldatasource.deleting.aspx 删除http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.sqldatasource.deleting.aspx
這兩篇也一樣,可以參考。这两篇也一样,可以参考。 (這兩篇講基礎,請從此入門) (这两篇讲基础,请从此入门)