首页 > 编程 > .NET > 正文

ASP.NET立即上手教程 10

2024-07-10 12:56:33
字体:
来源:转载
供稿:网友

在sql数据库中更新数据
在web应用程序中更新数据库常常是一件棘手的事情。datagrid控件提供了一些内建的支持
,使得更新数据库变得容易。要想编辑行记录,datagrid支持一个整数类型的edititemin
dex属性,他用来指明表格控件的哪一行是可编辑的。当设定该属性之后,datagrid中对应
的行用输入框来代替标签。值-1表示没有可编辑的行。asp.net页面可以在服务器端表单中
包含datagrid控件,通过datagrid控件的对象模型来访问可编辑的数据。
为了判断哪一行将被编辑,你需要接收一些用户的输入,以此来判断他们将编辑哪一行。
datagrid可以包含editcommandcolumn属性,它提供了一个连接,用以激活三个特定的事件
:editcommand、updatecommand、和cancelcommand。editcommandcolumn被加在datagrid
的列集合中,如下面的例子所示:
...
oneditcommand="mydatagrid_edit"
oncancelcommand="mydatagrid_cancel"
onupdatecommand="mydatagrid_update"
datakeyfield="au_id"
>
在datagrid标签上,可以绑定每一个从editcommandcolumn激活的命令事件句柄。这些句柄
的datagridcommandeventargs参数可以让你直接访问从客户端选择的可编辑行索引值。注
意,为了使更改生效,你需要重新绑定datagrid,像下面的例子这样:
public void mydatagrid_edit(object sender, datagridcommandeventargs e) {
mydatagrid.edititemindex = (int)e.item.itemindex;
bindgrid();
}
当编辑datagrid中的行的时候,editcommandcolumn提供了可供使用的两个连接:update
和 cancel。如果客户端选择了cancel,你只需将edititemindex设置为-1。如果客户端选
择了update,你需要对数据库执行你的更新命令。执行更新命令的时候,你需要知道被编
辑行在数据库中对应记录的主键。为了支持这个功能,datagrid提供了一个datakeyfield
属性,可以用来设置主键对应的字段。在绑定到updatecommand的事件句柄中,你可以从d
atagrid的数据键集合取得键的名称。你可以使用事件的itemindex来索引集合,像下面的
例子:
mycommand.parameters["@id"].value = mydatagrid.datakeys[(int)e.item.itemindex]
;
;
在更新事件句柄结束以后,将edititemindex设置为-1。下面的例子演示了这种情况。
c# datagrid6.aspx
[运行] | [源代码] 前面的例子中有一个问题,那就是当编辑一行的时候,主键字段(au
_id)也提供了一个文本输入框。因为需要这个值来确定数据库中的哪一行记录被更新,所
以你可能不希望客户端改变这个值。幸运的是,你可以通过详细指定每一个可编辑行的外
观,来禁止该列提供文本输入框。具体方法是使用boundcolumn控件来分配每一列的数据字
段,在datagrid的列集合定义每一行。使用这种技术可以实现列的完全控制,当然也包括
readonly属性。对于au_id列,你可以设置它的readonly属性为true。这样,当一行处于编
辑模式的时候,au_id列依然显示为一个文本标签,而不是文本输入框。下面的例子演示了
这种技术。
c# datagrid7.aspx
[运行] | [源代码] boundcolumn控件并非datagrid的列集合中可以设置属性的唯一控件。
你也可以指定templatecolumn,它对列的内容提供了完全的控制。模板对内容的显示更具
有随意性,你可以在datagrid的列中提供你喜欢的任何控件,也包括服务器端控件。下面
的例子演示了如何使用templatecolumn,对"state"列使用下拉列表服务器控件,对"cont
ract"列使用复选框html控件。asp.net数据绑定语法用于在模板中输出数据字段的值。注
意在编辑行中映射下拉列表和复选框到的state时候有一点小技巧。
c# datagrid8.aspx
[运行] | [源代码]
如同在templatecolumn中放置下拉列表框或者复选框一样,你也可以在其中放置其他控件
。下面的例子中,添加了一个validator验证控件,在执行更新之前检查客户端的输入。
c# datagrid9.aspx
[运行] | [源代码]
在sql数据库中删除数据
从数据库中删除记录非常类似于更新或者插入命令,但是你依然需要确定表格中要删除的
特定行。可以添加到datagrid列中的另一个控件是buttoncolumn,它仅仅提供了一个按钮
控件。buttoncolumn支持一个commandname属性,可以设置为“delete”。在datagrid上,
当你执行删除操作的时候,需要对deletecommand绑定一个事件句柄。此外,你需要使用数
据键(datakeys)集合来确定客户端选定的行。下面的例子演示了这一过程:
c# datagrid10.aspx
[运行] | [源代码]
从sql数据库中排序
对于任何表格来说,常常要求它对所包含的数据具有排序的能力。然而,datagrid控件本
身并不具有数据排序的功能。它通过用户单击要对数据排序的列标题,调用事件句柄。当
datagrid的 allowsorting属性被设置为true,datagrid就为列标题提供了一个超链接,用
以对表格激活sort命令。你可以给datagrid的onsortcommand属性设置句柄,来处理用户的
单击。列的名字作为sortexpression 的属性,传递给datagridsortcommandeventargs的参
数。该参数可以用来设置绑定到表格的dataview的sort属性。请看下面的代码和例子。
c# datagrid11.aspx
[运行] | [源代码]
当你使用boundcolumn控件的时候,可以明确地为每一列设置sortexpression属性,就象下
面的实例
c# datagrid12.aspx
[运行] | [源代码]
运用主-从关系
常常有这样的情况:数据模型包含的关系不能仅仅通过一个表格来表现。很多时候,在基
于web的界面中,用户选择数据中的某一行(通常是标题),然后重新定位到“细节”页面
(通常是内容),显示用户所选行的详细信息。为了使用datagrid来完成这个工作,需要
添加hyperlinkcolumn到列集合。hyperlinkcolumn指定当用户单击超连接的时候将要重新
定向的细节页面。你可以在这个超链接中使用格式化字符串语法提交字段值,字段值作为
get方式提交字符串的参数。下面的例子演示了这一过程。
datanavigateurlfield="au_id"
datanavigateurlformatstring="datagrid13_details.aspx?id={0}"
text="get details"
/>
在细节页面中,可以取得提交字符串的参数,并且执行一个联合(join)查询语句,从数据
库中获取详细信息。参阅下面的例子:
c# datagrid13.aspx
[运行] | [源代码]
书写和使用存储过程
一般来说,执行特定的查询可以取得不同的执行性能。使用存储过程可以降低应用程序中
数据库的负荷。存储过程很容易创建,甚至可以使用sql语句来创建。下面的代码建立了一
个简单的返回一个表的存储过程:
create procedure getauthors as
select * from authors
return
go
你也可以建立一个可以接受参数的存储过程,例如:
create procedure loadpersonalizationsettings (@userid varchar(50)) as
select * from personalization where [email protected]
return
go
从asp.net页面中使用存储过程不过是sqlcommand对象的扩展。commandtext是用来代替特
定查询文本的存储过程的名字。你可以通过设定commandtype的属性来指定sqlcommand的c
ommandtext为存储过程。
mycommand.selectcommand.commandtype = commandtype.storedprocedure;
下面的例子演示了调用存储过程来填充dataset。
c# datagrid14.aspx
[运行] | [源代码]
存储过程的参数传递过程和特定的查询一样,请看下面的例子:
c# datagrid15.aspx
[运行] | [源代码]
c# datagrid16.aspx
[运行] | [源代码]
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表