ASP.NET入门教程 8.2 修改已存在的记录[2]
注意结尾处的WHERE子句 它指定要修改哪条记录 下面的语法表示修改数据库中的字段Fieldl的值和参数Field 中包含的值相匹配的记录 您知道要匹配的值来源于参数 因为在该字段的名称前使用了@符号 它指示ASP NET 从参数列表中获取该值 如果没有WHERE子句 这个UPDATE语句将会使用用户输入的值更新所有记录
WHERE [Field ] = @Field
VWD还在数据源控件中新增了一组标记以创建UPDATE参数 ASP NET 自动用当前存在于表中的值填充这些参数 当用户在数据绑定控件中进行修改时 ASPNET 将聪明地替换掉旧值 但作为标志的惟一字段是个例外 此时ASP NET 会在DataKeyNames字典中同时保存旧值和新值 如本章前面介绍数据写入时所述
(任何类型的)参数都不是控件 创门是位于数据源控件内的标记
<ControlParameters>可用与《UpdateParameters>一样的方式保存值 <UpdateParameters>保存的是数据源控件从己有记录中读取的值 而<ConbrolParameters>保存的是用户输入的值或从一些控件(不同于正在修改数据的数据绑定控件)中选择值 例如 修改GridVitew中的日期 但希望从Calendar控件中选择该日期 您在第 章中创建带有主一子关系控件的页面时使用过<ControlParameters> 在本章后面介绍数据写入时您将看到更多示例
在数据源控件中可以添加一个可选的属性 ConflictDetection= CompareAllValues 冲突探测使得DataKeyNames解决方案可以避免两个用户同时更新一条记录
在实现更新的数据绑定控件中有两处变化 同时还要将控件从只读状态修改为可以更新记录(如下代码阴影部分所示) 首先是增加了DataKeyNames属性 其次是在字段列中增加了一个新的 字段 把它称作CommandField是因为它为用户提供一个按钮 单击该按钮将执行一条命令 只有当ASP NET 在数据绑定控件上创建一个用于显示按钮的类似字段的列时才将其看作是字段
<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>
lishixinzhi/Article/program/net/201311/14648