在激活某类数据写入的时候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 入门教程完整版