`

ASP.NET服务器控件

阅读更多

 

DetailsView控件

如其名所示,就是为了显示记录的详细信息,在同一时刻只显示一条记录。作为数据绑定控件,DetailsView也能绑定到SqlDataSource数据源,绑定后代码:

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 

DataKeyNames="id" DataSourceID="SqlDataSource1">

     <Fields>

        <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" 

                ReadOnly="True" SortExpression="id" />

           <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />

        </Fields>

    </asp:DetailsView>

可以看出与GridView不同的是<Fields>,在GridView里面是<Columns>。默认字段类型也是

BoundField类型,当然也可以将BoundField类型转换为TemplateField类型,也可以直接添加

TemplateField类型。然后通过编辑模板列来编辑,这些都是和GridView相同的。除了常见的给

DetailsView启用增删改以外,也可以给其启用分页功能,这将时其可以在各个记录间来回切换,但该

方法效率很低,将导致所有记录都下载到客户端,而换页时又将导致所有记录PostBack,可以使用缓

存特性来缓存DetailsView中的数据。另外DetailsView(从)也可以联合GridView(主)来实现主从表

的效果:这在讲GridView时讲解过,主要是一张表(从)的某个字段在另一张表(主)里是

DataKeyNames(呵呵,这是在GridView里的说法,反映到表里就是主键),这样一般来说选中GridView(

主)里的一行(当然要开启选择功能),就有一些DetailsView(从)的记录符合条件。所以设置时要在

从的配置数据源里的where子句来过滤(看GridView时的讲解),而怎么才能获得选择的主的主键值呢

,就是GridView.SelectedValue,这个值就是选择的那行的主键(DataKeyNames)值。

要隐藏任何一个字段,只要在编辑列里将Visible设置为false就可以了。要合并两个字段,先在编辑

列里将这俩字段删除,再添加一个模板列,再在编辑模板列里设置它的自定义绑定,用Eval或Bind绑

定这俩字段,这里就是绑定字符串可以写自己想要显示的字符串加绑定。别忘了对于任何数据绑定

控件最好指定其DataKeyNames。

 

 

在DetailsView显示的记录里增加图片的显示,这里在数据库里存储的是图片的路径,而不是用存储

图片的二进制流的那种方式。1.在添加字段里选ImageField类型的字段,这时会让你选绑定到的字

段(就你的图片字段),及Url格式字符串(它给的例子是images/img{0}.jpg),等你绑定后你后看到其

代码是这样写的DataImageUrlField="picsrc" DataImageUrlFormatString="images/img{0}.jpg"

意思是绑定字段是picsrc,图片显示路径是images/img{picsrc}.jpg,这要看你的数据库里是怎么样

记录的picsrc,我在这里只记录的是图片名如:1.jpg,如果你照着例子写Url格式字符串,最终图片显

示格式将是images/img{1.jpg}.jpg,这显然是不对的,所以要写成images/{0}。但要知道这时你只

能显示图片,不能进行更改添加什么的。所以你要在编辑字段里将该ImageField转换为

TemplateField,则其ItemTemplate会是

                <ItemTemplate>

                    <asp:Image ID="Image1" runat="server" 

                        ImageUrl='<%# Eval("picsrc", "images/{0}") %>' />

                </ItemTemplate>

而通过观察其EditItemTemplate和InsertItemTemplate我们可以看出其默认的修改控件也是

TexBox,这显然不是我们想要的,于是我们可以把其改成UploadFile控件来上传我们的图片,但

UploadFile控件只有两个布尔值的属性能与数据库字段双向绑定,我们怎么来更新我们所选择的图

片呢,可以加一个label控件来将UploadFile里的图片名记录到label.text里来,然后更新时修改

label的text属性所绑定的字段(就是图片名字段,这里不需要完整的虚拟路径,从images/{0}中可以

看出)。而像UploadFile的文件上传要在DetailsView1_ItemUpdating(更新数据之前)事件里完成,

至于获得UploadFile文件的名称,很遗憾,我试过好多方法,在DetailsView1_ItemUpdating里都无法

让label获得到UploadFile文件的名称,这就造成了更新时依然是绑定到的图片名(所以就等以没更

新),而插入式更是插入空值。所以就在编辑模板里有加入了Button,让label获得到UploadFile文件

的名称在button的单击事件里进行,虽然成功了,但觉得很麻烦。

 

 

DetealsView具有很多与GridView类似的事件,如果熟悉了GridView,则会相当熟悉这些事件的使用。

DetealsView有一个DefaultMode属性,用来设置DetealsView的默认显示模式:Edit(编辑模式)Insert(新建模

式)ReadOnly(只读模式)。

DetealsView有一个ChangeMode方法来改变他的模式,如DetealsView1.ChangeMode(DetailsViewMode.Edit)。

 

FormView控件

与DeteasView控件的区别就是FormView控件完全是基于模板,开发人员完全可以在编辑模板里任意

设计自己想要的编辑模式插入模式等。所以也很容易在这里为其添加验证控件,而DeteasView控件的BoundField

则没这么容易添加验证控件。其他所有事件几乎相同。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics