DetailsView 和 FormView 擅长于每次都只显示一个记录,并包含一个可选的分页按钮。
DetailsView 和 FormView 的差别在于:DetailsView 显示表中的内容,而 FormView 更加灵活,可以在无表的情况下显示内容。如果打算使用模版,FormView 会提供最大的灵活性,否则,DetailsView 会提供一个更简单的模型。
DetailsView
DetailsView 被设计为每次只显示一个记录,它把信息段(字段或属性)放入到一个表的单独行中。只要你把 AllPaging 设为 true,它还允许你借助分页控件从一个记录浏览到另一个。
ProviderName="System.Data.SqlClient" SelectCommand="select * from Employees">
AllowPaging="true" PagerSettings-Mode="Numeric">
使用 DetailsView 做一个单项记录的分页浏览显得颇有诱惑力,遗憾的是这样的效率可能不太高。每次在记录间的切换都会触发一次回传,而真正的缺点在于虽然只显示一条记录,但却不得不获取所有的记录。(使用缓存技术可以减少数据库的负担)
一个好一点的解决方案是,使用全部数据的一个子集创建自己的记录选择控件。例如,将所有员工的姓名放在一个列表框并绑定一个只查询员工姓名的数据源,然后当列表中的名字被选定时,使用另一个数据源只获取被选定员工的完整资料。
1. 定义字段
和 GridView 一样,如果你没有显式定义了字段,DetailsView 会使用反射来生成它显示的字段。要自定义字段的话,需要设置:
AutoGenerateRows="false"
2. 记录操作
DetailsView 支持删除、插入、编辑等操作,只需简单的设置 DetailsView 的三个属性:AutoGenerateDeleteButton、AutoGenerateInsertButton、AutoGenerateEditButton,在 DetailsView 底部会增加一个 CommandField 并通过链接方式来提供相应的功能。
DetailsView 有 3 种模式:只读、编辑、插入。可以获取 CurrentMode 来确定它的模式,调用 ChangeMode()方法来改变它的值。也可以使用 DefaultMode 属性来创建一个总是编辑和插入模式开始的 DetailsView 。
提示:
如果 DetailsView 处于编辑模式下,用户浏览到一个新的记录,此时 DetailsView 仍然会处于编辑模式下。如果这不是你希望的行为,可以对 PageIndexChanged 事件做出反应并调用 ChangeMode()方法通过编程将它返回到只读模式。
protected void DetailsView1_PageIndexChanged(object sender, EventArgs e)
{
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
{
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
}
}
FormView
FormView 是一个仅使用模版显示和编辑单个记录的控件,其模型之美在于它和 GridView 的 TemplateField 模型紧密相关,你可以完全把GridView中的模版拷贝到 FormView 中使用。
FormView 也可以在只读、插入和删除这3中状态下工作。不同的是,FormView 控件不支持自动创建编辑按钮的 CommandField 类,你需要手工创建那些 Button 并且对它们的 CommandName 进行合适的设置( Edit、Cancel、Update、Insert、Delete、New )。