五十一从GridView的页脚插入新记录.docx

上传人:b****8 文档编号:27935242 上传时间:2023-07-06 格式:DOCX 页数:31 大小:645.90KB
下载 相关 举报
五十一从GridView的页脚插入新记录.docx_第1页
第1页 / 共31页
五十一从GridView的页脚插入新记录.docx_第2页
第2页 / 共31页
五十一从GridView的页脚插入新记录.docx_第3页
第3页 / 共31页
五十一从GridView的页脚插入新记录.docx_第4页
第4页 / 共31页
五十一从GridView的页脚插入新记录.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

五十一从GridView的页脚插入新记录.docx

《五十一从GridView的页脚插入新记录.docx》由会员分享,可在线阅读,更多相关《五十一从GridView的页脚插入新记录.docx(31页珍藏版)》请在冰豆网上搜索。

五十一从GridView的页脚插入新记录.docx

五十一从GridView的页脚插入新记录

在ASP.NET2.0中操作数据之五十一:

从GridView的页脚插入新记录

作者:

heker2007字体:

[增加 减小]类型:

转载时间:

2016-05-16 我要评论

本文介绍在ASP.NET2.0中如何在GridView的页脚动态插入一行新记录,要显示页脚行只需要设置ShowFooter属性为true。

我们可以这样对页脚行进行用户定制:

将每一列转换成TemplateField,并在其FooterTemplate模板定制插入界面。

导言:

  正如教程《概述插入、更新和删除数据》里探讨过的一样,GridView,DetailsView和FormViewWeb控件都有内置的修改数据的功能。

当声明绑定到数据源控件时,可以快速而方便地修改数据——甚至不用写一行代码。

不幸的是,只有DetailsView和FormView控件提供了内置的插入、编辑、删除功能,而GridView控件只支持编辑、删除功能。

不过,稍许努力,我们就能使GridView控件包含一个插入界面。

  为了给GridView添加插入功能,我们要决定如何添加新记录:

创建插入界面,编码插入数据。

在本教程,我们将为GridView的页脚行(footerrow)添加插入界面(见图1)。

其中每一列包含相应的用户界面元件(比如在TextBox里输入产品名称,在DropDownLis里选择供应商等等),同时我们需要一个"Add"按钮,当点击时,发生页面回传,将新记录添加到表Products里。

图1:

页脚行提供了一个添加新记录的界面

第一步:

在GridView控件里展示产品信息

  首先添加一个展示产品的GridView控件。

打开EnhancedGridView文件夹里的InsertThroughFooter.aspx页面,在上面添加一个GridView控件,设其ID为Products,然后,在其智能标签里绑定到一个名为ProductsDataSource的ObjectDataSource。

图2:

创建一个名为ProductsDataSource的新ObjectDataSource

  设置该ObjectDataSource调用ProductsBLL类的GetProducts()方法获取产品信息。

在本教程里,我们只关注于添加插入功能,与编辑和删除无关。

所以,确保在“插入”选项卡里选AddProduct()方法。

而在“编辑”和“删除”里选“(None)”。

图3:

将ObjectDataSource的Insert()方法设置为AddProduct()

图4:

在UPDATE和DELETE选项里选“(None)”

  完成设置后,VisualStudio会自动添加相关列。

现在,我们暂时不管这些列,在教程后续部分,我们将移除一些列,因为在添加新记录时我们不需指定这些列的值。

  因为数据库中大概有80个产品,所以我们最好还是启用分页功能,以便使插入界面更直观、更易操作。

回到页面,在GridView的智能标签里启用分页。

现在,GridView和ObjectDataSource的声明代码看起来和下面的差不多:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

GridViewID="Products"runat="server"AutoGenerateColumns="False"

 DataKeyNames="ProductID"DataSourceID="ProductsDataSource"

 AllowPaging="True"EnableViewState="False">

 

 

BoundFieldDataField="ProductID"HeaderText="ProductID"

  InsertVisible="False"ReadOnly="True"

  SortExpression="ProductID"/>

 

BoundFieldDataField="ProductName"HeaderText="ProductName"

  SortExpression="ProductName"/>

 

BoundFieldDataField="SupplierID"HeaderText="SupplierID"

  SortExpression="SupplierID"/>

 

BoundFieldDataField="CategoryID"HeaderText="CategoryID"

  SortExpression="CategoryID"/>

 

BoundFieldDataField="QuantityPerUnit"HeaderText="QuantityPerUnit"

  SortExpression="QuantityPerUnit"/>

 

BoundFieldDataField="UnitPrice"HeaderText="UnitPrice"

  SortExpression="UnitPrice"/>

 

BoundFieldDataField="UnitsInStock"HeaderText="UnitsInStock"

  SortExpression="UnitsInStock"/>

 

BoundFieldDataField="UnitsOnOrder"HeaderText="UnitsOnOrder"

  SortExpression="UnitsOnOrder"/>

 

BoundFieldDataField="ReorderLevel"HeaderText="ReorderLevel"

  SortExpression="ReorderLevel"/>

 

CheckBoxFieldDataField="Discontinued"HeaderText="Discontinued"

  SortExpression="Discontinued"/>

 

BoundFieldDataField="CategoryName"HeaderText="CategoryName"

  ReadOnly="True"SortExpression="CategoryName"/>

 

BoundFieldDataField="SupplierName"HeaderText="SupplierName"

  ReadOnly="True"SortExpression="SupplierName"/>

 

GridView>

 

ObjectDataSourceID="ProductsDataSource"runat="server"

 InsertMethod="AddProduct"OldValuesParameterFormatString="original_{0}"

 SelectMethod="GetProducts"TypeName="ProductsBLL">

 

 

ParameterName="productName"Type="String"/>

 

ParameterName="supplierID"Type="Int32"/>

 

ParameterName="categoryID"Type="Int32"/>

 

ParameterName="quantityPerUnit"Type="String"/>

 

ParameterName="unitPrice"Type="Decimal"/>

 

ParameterName="unitsInStock"Type="Int16"/>

 

ParameterName="unitsOnOrder"Type="Int16"/>

 

ParameterName="reorderLevel"Type="Int16"/>

 

ParameterName="discontinued"Type="Boolean"/>

 

ObjectDataSource>

图5:

在一个启用了分页功能的GridView里,显示产品的所有数据项

第2步:

添加一个页脚行

  GridView控件包含页眉行、数据行和页脚行。

GridView控件ShowHeader和ShowFooter属性决定了是否显示页眉行和页脚行。

如果要显示页脚行,我们需要将ShowFooter属性设置为true。

如图6所示:

图6:

设ShowFooter属性为True,添加页脚行

  我们注意到页脚行的背景色是深红色,这是由于我们在教程《使用ObjectDataSource展现数据》里创建了一个名为DataWebControls的主题,并将其应用为所有的页面底色。

特别的,皮肤文件GridView.skin设置FooterStyle属性使用FooterStyleCSS,其代码如下:

?

1

2

3

4

5

6

.FooterStyle

{

 background-color:

#a33;

 color:

White;

 text-align:

right;

}

  注意:

在以前的教程我们提到过使用GridView的页脚行。

如果不清楚的话,请查阅教程第15章《在GridView的页脚中显示统计信息》

  设置ShowFooter属性为true后,在浏览器里观看效果。

当前的页脚行并不包含任何的文字或Web控件。

在第3步,我们将修改其包含相应的插入界面。

图7:

页脚行显示为空白

第3步:

自定义页脚行

  回顾教程《在GridView控件中使用TemplateField》,在那篇教程我们探讨了如何对GridView的某一列使用TemplateFields(而不是BoundFields或CheckBoxFields),从而实现自定义显示样式;而在教程《定制数据修改界面》里我们看到如何在GridView里使用TemplateFields定制编辑界面。

一个TemplateField是由诸如ItemTemplate、EditItemTemplate等模板构成的。

比如,ItemTemplate模板显示的数据行为只读状态;而EditItemTemplate模板定制了一个编辑行界面。

  除了ItemTemplate、EditItemTemplate等模板外,TemplateField也包含一个名为FooterTemplate的模板,它为容器指定页脚行。

所以我们可以在FooterTemplate模板里添加插入界面要用到的Web控件。

让我们开始吧,首先,我们将GridView控件里的所有列转换成TemplateFields。

在GridView控件的智能标签里点击“编辑列”,在左边选中每个域,再点击“ConvertthisfieldintoaTemplateField”。

图8:

将每个域转换为一个TemplateField

  点击“ConvertthisfieldintoaTemplateField”的话,将当前类型的域转换成相应的TemplateField。

比如,每个BoundField将转换成这样的TemplateField,它的ItemTemplate包含一个Label控件来显示相应的数据域;它的EditItemTemplate使用一个TextBox控件来显示相应的数据域。

例如,在这里,名为ProductName的BoundField将被转换为如下所示的TemplateField:

?

1

2

3

4

5

6

7

8

9

10

TemplateFieldHeaderText="ProductName"SortExpression="ProductName">

 

 

TextBoxID="TextBox1"runat="server"

  Text='<%#Bind("ProductName")%>'>

TextBox>

 

 

 

LabelID="Label2"runat="server"

  Text='<%#Bind("ProductName")%>'>

Label>

 

TemplateField>

  同样的,名为Discontinued的CheckBoxField转换为TemplateField后,其ItemTemplate和EditItemTemplate模板都将包含一个CheckBoxWeb控件(只是ItemTemplate模板里的CheckBox不可用);而处于“只读”状态的ProductIDBoundField转换成TemplateField后,其ItemTemplate和EditItemTemplate模板都包含一个Label控件。

简而言之,将GridView里的某一列转换为一个TemplateField,是定制自定义模板的一种又快又容易的方法,且不会丧失该列应有的功能。

  由于我们不需要GridView支持编辑功能,将每个TemplateField的EditItemTemplate模板删除,只留下ItemTemplate模板。

完成后,GridView的代码看起来应和下面的差不多:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

GridViewID="Products"runat="server"AutoGenerateColumns="False"

 DataKeyNames="ProductID"DataSourceID="ProductsDataSource"

 AllowPaging="True"EnableViewState="False"ShowFooter="True">

 

 

TemplateFieldHeaderText="ProductID"InsertVisible="False"

  SortExpression="ProductID">

  

  

LabelID="Label1"runat="server"

   Text='<%#Bind("ProductID")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="ProductName"SortExpression="ProductName">

  

  

LabelID="Label2"runat="server"

   Text='<%#Bind("ProductName")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="SupplierID"SortExpression="SupplierID">

  

  

LabelID="Label3"runat="server"

   Text='<%#Bind("SupplierID")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="CategoryID"SortExpression="CategoryID">

  

  

LabelID="Label4"runat="server"

   Text='<%#Bind("CategoryID")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="QuantityPerUnit"

  SortExpression="QuantityPerUnit">

  

  

LabelID="Label5"runat="server"

   Text='<%#Bind("QuantityPerUnit")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="UnitPrice"SortExpression="UnitPrice">

  

  

LabelID="Label6"runat="server"

   Text='<%#Bind("UnitPrice")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="UnitsInStock"

  SortExpression="UnitsInStock">

  

  

LabelID="Label7"runat="server"

   Text='<%#Bind("UnitsInStock")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="UnitsOnOrder"

  SortExpression="UnitsOnOrder">

  

  

LabelID="Label8"runat="server"

   Text='<%#Bind("UnitsOnOrder")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="ReorderLevel"

  SortExpression="ReorderLevel">

  

  

LabelID="Label9"runat="server"

   Text='<%#Bind("ReorderLevel")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="Discontinued"

  SortExpression="Discontinued">

  

  

CheckBoxID="CheckBox1"runat="server"

   Checked='<%#Bind("Discontinued")%>'Enabled="false"/>

  

 

TemplateField>

 

TemplateFieldHeaderText="CategoryName"

  SortExpression="CategoryName">

  

  

LabelID="Label10"runat="server"

   Text='<%#Bind("CategoryName")%>'>

Label>

  

 

TemplateField>

 

TemplateFieldHeaderText="SupplierName"

  SortExpression="SupplierName">

  

  

LabelID="Label11"runat="server"

   Text='<%#Bind("SupplierName")%>'>

Label>

  

 

TemplateField>

 

GridView>

  现在,每个GridView列都已经转换成一个TemplateField,我们在其FooterTemplate里添加适当的插入界面。

然而,有些列没有插入界面(比如ProductID),其它列的TemplateField模板将包含Web控件,供用户输入产品信息。

  在GridView的智能标签里点击“EditTemplates”,从下拉列表里选择某列的FooterTemplate模板,从工具箱里拖一个适当的控件到页面上。

图9:

在每列的FooterTemplate里添加适当的插入界面。

下面列出了GridView的所有列,并指定每列添加哪些插入界面:

ProductID–无

ProductName–添加一个TextBox,ID为NewProductName;再添加一个

RequiredFieldValidator控件,防止用户未输入产品名。

SupplierID–无

CategoryID–无

QuantityPerUnit–添加一个TextBox,ID为NewQuantityPerUnit

UnitPrice–添加一个TextBo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1