8.5 数据绑定控件(FormView)
FormView控件只能显示数据库中一行的数据,并且提供对数据的分页操作,FormView控件可以以一种不规则的外观来将数据呈现给用户。FormView控件同样支持模板,以方便开发人员自定义FormView控件的UI,FormView控件支持的模板如下所示:
1)ItemTemplate:用于在FormView种呈现一个特殊的记录。
2)HeaderTemplate:用于指定一个可选的页眉行。
3)FooterTemplate:用于指定一个可选的页脚行。
4)EmptyDataTemplate:当FormView的DataSource缺少记录的时候,EmptyDataTemplate将会代替ItemTemplate来生成控件的标记语言。
5)PagerTemplate:如果FormView启用了分页的话,这个模板可以用于自定义分页的界面。
6)EditItemTemplate / InsertItemTemplate:如果FormView支持编辑或插入功能,那么这两种模板可以用于自定义相关的界面。
通过编辑ItmTemplate,能够自定义HTML以呈现数据,这种情况很像Repeater控件。FormView控件同样支持自动套用格式,选择【自动套用格式】选项就能够为FormView控件选择默认格式,选择后如图8-42所示。
图8-42 自定义FormView控件
当FormView控件界面编写完成后,HTML代码如下所示。
上述代码创建了FormView控件,并为FormView控件自定义了若干模板。刚才只是编写了ItemTemplate模板,但是EdititemTemplate也已经在HTML标签中生成。
注意:FormView控件模板中的相应数据字段也是通过数据绑定语法实现的,如<%# Eval("字段名称") %>。
FormView控件同样支持对当前数据的更新、删除、选择等操作。当拖放一个按钮控件时,可以选择DataBindings来为按钮控件的属性做相应的配置,如图8-43所示。
图8-43 DataBindings
当单击FormView中的控件时,会触发Command事件,要使用FormView控件进行更新等操作,必须在相应的模式下更新才行,例如当需要更新操作时,则必须在编辑模式下才能进行更新操作。当执行相应的操作时,例如更新操作,则必须在编辑模式下进行操作,并需要使用ItemUpdated事件来编写相应的更新事件。编写FormView控件中的ItemTemplate和EditItemTemplate,生成的HTML代码如下所示。
上述代码编写了FormView控件中的ItemTemplate和EditItemTemplate。在页面中,增加了按钮来切换FormView控件的编辑模式,按钮控件代码如下所示。
当单击按钮时,FormView控件会更改其编辑模式,示例代码如下所示。
当更改了编辑模式后,FormView控件允许在当前页面直接更改数据的值,并通过ItemUpdated进行更新,示例代码如下所示。
上述代码允许开发人员能够自定义数据操作,通过对象e的值来获取相应的数据字段的值并进行更新,运行结果如图8-44和8-45所示。
图8-44 视图模式
图8-45 编辑模式
当单击了其中的更新,则会触发ItemUpdated事件,开发人员能够通过编写ItemUpdated事件来进行相应的更新操作。值得注意的是,通常情况下数据源控件必须支持更新操作才能够执行更新,在配置数据源时,需要为更新语句进行配置。在配置和生成SQL语句中必须选择【高级】选项、勾选【生成update、insert、delete语句】复选框才能够让数据源控件支持更新等操作,如图8-46所示。
图8-46 高级数据源配置
如果数据绑定控件需要使用Insert等语句时,则数据源控件需配置高级SQL生成选项,开发人员还能够在数据源控件的HTML代码中进行相应的SQL语句的更改已达到自定义数据源控件的目的。
1)ItemTemplate:用于在FormView种呈现一个特殊的记录。
2)HeaderTemplate:用于指定一个可选的页眉行。
3)FooterTemplate:用于指定一个可选的页脚行。
4)EmptyDataTemplate:当FormView的DataSource缺少记录的时候,EmptyDataTemplate将会代替ItemTemplate来生成控件的标记语言。
5)PagerTemplate:如果FormView启用了分页的话,这个模板可以用于自定义分页的界面。
6)EditItemTemplate / InsertItemTemplate:如果FormView支持编辑或插入功能,那么这两种模板可以用于自定义相关的界面。
通过编辑ItmTemplate,能够自定义HTML以呈现数据,这种情况很像Repeater控件。FormView控件同样支持自动套用格式,选择【自动套用格式】选项就能够为FormView控件选择默认格式,选择后如图8-42所示。
图8-42 自定义FormView控件
当FormView控件界面编写完成后,HTML代码如下所示。
+展开
-HTML
<asp:FormView ID="FormView1" runat="server" AllowPaging="True"
BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
CellPadding="4" DataKeyNames="ID" DataSourceID="SqlDataSource1"
GridLines="Both" Width="100%">
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
<RowStyle BackColor="White" ForeColor="#003399" />
<EditItemTemplate>
ID:
<asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>' /><br >
TITLE:
<asp:TextBox ID="TITLETextBox" runat="server" Text='<%# Bind("TITLE") %>' /><br >
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="更新" />
<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="取消" />
</EditItemTemplate>
<InsertItemTemplate>
TITLE:
<asp:TextBox ID="TITLETextBox" runat="server" Text='<%# Bind("TITLE") %>' /> <br >
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True"
CommandName="Insert" Text="插入" />
<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="取消" />
</InsertItemTemplate>
<ItemTemplate>
新闻编号:
<asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>' /><br >
新闻标题:
<asp:Label ID="TITLELabel" runat="server" Text='<%# Bind("TITLE") %>' /><br >
</ItemTemplate>
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
<EditRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
</asp:FormView>
BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
CellPadding="4" DataKeyNames="ID" DataSourceID="SqlDataSource1"
GridLines="Both" Width="100%">
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
<RowStyle BackColor="White" ForeColor="#003399" />
<EditItemTemplate>
ID:
<asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>' /><br >
TITLE:
<asp:TextBox ID="TITLETextBox" runat="server" Text='<%# Bind("TITLE") %>' /><br >
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="更新" />
<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="取消" />
</EditItemTemplate>
<InsertItemTemplate>
TITLE:
<asp:TextBox ID="TITLETextBox" runat="server" Text='<%# Bind("TITLE") %>' /> <br >
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True"
CommandName="Insert" Text="插入" />
<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="取消" />
</InsertItemTemplate>
<ItemTemplate>
新闻编号:
<asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>' /><br >
新闻标题:
<asp:Label ID="TITLELabel" runat="server" Text='<%# Bind("TITLE") %>' /><br >
</ItemTemplate>
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
<EditRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
</asp:FormView>
上述代码创建了FormView控件,并为FormView控件自定义了若干模板。刚才只是编写了ItemTemplate模板,但是EdititemTemplate也已经在HTML标签中生成。
注意:FormView控件模板中的相应数据字段也是通过数据绑定语法实现的,如<%# Eval("字段名称") %>。
FormView控件同样支持对当前数据的更新、删除、选择等操作。当拖放一个按钮控件时,可以选择DataBindings来为按钮控件的属性做相应的配置,如图8-43所示。
图8-43 DataBindings
当单击FormView中的控件时,会触发Command事件,要使用FormView控件进行更新等操作,必须在相应的模式下更新才行,例如当需要更新操作时,则必须在编辑模式下才能进行更新操作。当执行相应的操作时,例如更新操作,则必须在编辑模式下进行操作,并需要使用ItemUpdated事件来编写相应的更新事件。编写FormView控件中的ItemTemplate和EditItemTemplate,生成的HTML代码如下所示。
+展开
-HTML
<asp:FormView ID="FormView1" runat="server" AllowPaging="True"
BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
CellPadding="4" DataKeyNames="ID" DataSourceID="SqlDataSource1"
GridLines="Both" Width="100%" onitemcommand="FormView1_ItemCommand"
onitemupdated="FormView1_ItemUpdated">
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
<RowStyle BackColor="White" ForeColor="#003399" />
<EditItemTemplate>
新闻编号:
<asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>' />
<br >
新闻标题:
<asp:TextBox ID="TITLETextBox" runat="server" Text='<%# Bind("TITLE") %>' />
<br >
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="更新" />
<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="取消" />
</EditItemTemplate>
<InsertItemTemplate>
TITLE:
<asp:TextBox ID="TITLETextBox" runat="server" Text='<%# Bind("TITLE") %>' />
<br >
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True"
CommandName="Insert" Text="插入" />
<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="取消" />
</InsertItemTemplate>
<ItemTemplate>
新闻编号:
<asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>' /><br >
新闻标题:
<asp:Label ID="TITLELabel" runat="server" Text='<%# Bind("TITLE") %>' /><br >
</ItemTemplate>
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
<EditRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
</asp:FormView>
BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
CellPadding="4" DataKeyNames="ID" DataSourceID="SqlDataSource1"
GridLines="Both" Width="100%" onitemcommand="FormView1_ItemCommand"
onitemupdated="FormView1_ItemUpdated">
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
<RowStyle BackColor="White" ForeColor="#003399" />
<EditItemTemplate>
新闻编号:
<asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>' />
<br >
新闻标题:
<asp:TextBox ID="TITLETextBox" runat="server" Text='<%# Bind("TITLE") %>' />
<br >
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="更新" />
<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="取消" />
</EditItemTemplate>
<InsertItemTemplate>
TITLE:
<asp:TextBox ID="TITLETextBox" runat="server" Text='<%# Bind("TITLE") %>' />
<br >
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True"
CommandName="Insert" Text="插入" />
<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="取消" />
</InsertItemTemplate>
<ItemTemplate>
新闻编号:
<asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>' /><br >
新闻标题:
<asp:Label ID="TITLELabel" runat="server" Text='<%# Bind("TITLE") %>' /><br >
</ItemTemplate>
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
<EditRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
</asp:FormView>
上述代码编写了FormView控件中的ItemTemplate和EditItemTemplate。在页面中,增加了按钮来切换FormView控件的编辑模式,按钮控件代码如下所示。
+展开
-HTML
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Edit" />
当单击按钮时,FormView控件会更改其编辑模式,示例代码如下所示。
+展开
-C#
protected void Button2_Click(object sender, EventArgs e)
{
FormView1.ChangeMode(FormViewMode.Edit);//更改编辑模式
}
{
FormView1.ChangeMode(FormViewMode.Edit);//更改编辑模式
}
当更改了编辑模式后,FormView控件允许在当前页面直接更改数据的值,并通过ItemUpdated进行更新,示例代码如下所示。
+展开
-C#
protected void FormView1_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
{
Label1.Text = "相应值被更新"; //提示已被更改
FormView1.ChangeMode(FormViewMode.ReadOnly);//更改编辑模式
}
{
Label1.Text = "相应值被更新"; //提示已被更改
FormView1.ChangeMode(FormViewMode.ReadOnly);//更改编辑模式
}
上述代码允许开发人员能够自定义数据操作,通过对象e的值来获取相应的数据字段的值并进行更新,运行结果如图8-44和8-45所示。
图8-44 视图模式
图8-45 编辑模式
当单击了其中的更新,则会触发ItemUpdated事件,开发人员能够通过编写ItemUpdated事件来进行相应的更新操作。值得注意的是,通常情况下数据源控件必须支持更新操作才能够执行更新,在配置数据源时,需要为更新语句进行配置。在配置和生成SQL语句中必须选择【高级】选项、勾选【生成update、insert、delete语句】复选框才能够让数据源控件支持更新等操作,如图8-46所示。
图8-46 高级数据源配置
如果数据绑定控件需要使用Insert等语句时,则数据源控件需配置高级SQL生成选项,开发人员还能够在数据源控件的HTML代码中进行相应的SQL语句的更改已达到自定义数据源控件的目的。
加支付宝好友偷能量挖...