注意結尾處的WHERE子句它指定要修改哪條記錄下面的語法表示修改數據庫中的字段Fieldl的值和參數Field 中包含的值相匹配的記錄您知道要匹配的值來源於參數因為在該字段的名稱前使用了@符號它指示ASPNET 從參數列表中獲取該值如果沒有WHERE子句這個UPDATE語句將會使用用戶輸入的值更新所有記錄
WHERE [Field] = @Field
VWD還在數據源控件中新增了一組標記以創建UPDATE參數ASPNET 自動用當前存在於表中的值填充這些參數當用戶在數據綁定控件中進行修改時ASPNET 將聰明地替換掉舊值但作為標志的惟一字段是個例外此時ASPNET 會在DataKeyNames字典中同時保存舊值和新值如本章前面介紹數據寫入時所述
(任何類型的)參數都不是控件創門是位於數據源控件內的標記
<ControlParameters>可用與《UpdateParameters>一樣的方式保存值<UpdateParameters>保存的是數據源控件從己有記錄中讀取的值而<ConbrolParameters>保存的是用戶輸入的值或從一些控件(不同於正在修改數據的數據綁定控件)中選擇值例如修改GridVitew中的日期但希望從Calendar控件中選擇該日期您在第章中創建帶有主一子關系控件的頁面時使用過<ControlParameters>在本章後面介紹數據寫入時您將看到更多示例
在數據源控件中可以添加一個可選的屬性ConflictDetection= CompareAllValues沖突探測使得DataKeyNames解決方案可以避免兩個用戶同時更新一條記錄
在實現更新的數據綁定控件中有兩處變化同時還要將控件從只讀狀態修改為可以更新記錄(如下代碼陰影部分所示)首先是增加了DataKeyNames屬性其次是在字段列中增加了一個新的字段把它稱作CommandField是因為它為用戶提供一個按鈕單擊該按鈕將執行一條命令只有當ASPNET 在數據綁定控件上創建一個用於顯示按鈕的類似字段的列時才將其看作是字段
<asp:detailsview id=DetailsView runat=server datasourceid=SqlDataSource autogeneraterows=False
datakeynames=FixtureID
Height=px Width=px>
<Fields>
<asp:BoundField DataField=FixtureID
HeaderText=FixtureID InsertVisible=False
ReadOnly=True
SortExpression=FixtureID></asp:BoundField>
<asp:BoundField DataField=FixtureDate
HeaderText=FixtureDate SortExpression=FixtureDate />
<asp:CommandField
ShowEditButton=True
ShowInsertButton=True />
</Fields>
</asp:Detailsview>
[] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/net/201311/14648.html