在激活某類數據寫入的時候VWD將為數據綁定控件添加一個名為DataKeyNames的屬性其目的是保存某一字段的舊值和新值以便可以正確地執行寫入為了理解這個角色想像有一個關於Wrox United比賽的評論的表名為MatchReports在這個表中可以(和絕大多數表的做法一樣)將一個為每行記錄包含惟一ID號的字段設置為第一個字段將它稱為MatchReportID它的值是等整數並隨著球迷發送他們對比賽的報告而遞增現在假設出現了一點混亂管理員必須修改一份報告的ID例如從修改為在管理員進行修改的時候他首先選擇需要修改的記錄ASPNET 將把該記錄的ID保存在參數中如您在第章使用GridView作為主控件時所做的那樣接下來管理員修改該ID字段的值當他發送這個命令到數據庫時該命令看起來應該類似如下代碼所示
UPDATE MatchReports SET MatchReport= WHERE MatchReport=@MatchReportID
注意其中有要修改的字段的名字(MatchReportID)和新值()這個命令還包含修改哪條記錄的證明類似於WHERE MatchReportIIJ=@MatchReportID但這裡有一個沖突因為有兩個值可以放入@MatchReportID中由GridView保存的舊值和管理員輸入的新值()
DataKeyNames通過創建字典解決這個問題該字典在字段列表中為字段保存了這兩個值一個是舊值另一個是新值當向數據庫發出寫命令時ASPNET會智能地將DataKeyNames中的新值提供給該命令的SET部分並將DataKeyNames中的舊值提供給命令的WHERE部分沒有必要在DataKeyNames字典中加載所有的字段而且這樣速度也會很慢尤其是因為大多數字段並不會產生沖突VWD會自動將數據庫中作為惟一標識的字段添加到DataKeyNames中可以添加其他字段但VWD會自動添加總結一下DataKeyNames保存了一些字段的名稱ASPNET 必須記住這些字段的舊值和新值在使用VWD時很少需要修改DataKeyNames
ASPNET 入門教程完整版
From:http://tw.wingwit.com/Article/program/net/201311/14616.html