图6:添加界面为一个4列7行的表
现在我们在添加界面里添加Web控件.从工具箱拖2个DropDownList到表的相应方格里——一个用来显示supplier另一个用来显示category.
将用来显示supplier的那个DropDownList的ID设为Suppliers,并将其绑定到一个名为SuppliersDataSource的ObjectDataSource.设置该ObjectDataSource调用SuppliersBLL class类的GetSuppliers方法.并在UPDATE标签里选“(None)”,点击Finish完成设置向导.
图7:设置ObjectDataSource调用SuppliersBLL Class类的GetSuppliers方法
设置该DropDownList显示CompanyName列,而传递的值为SupplierID列.
图8:显示CompanyName列,传递的是SupplierID列的值
将第2个DropDownList的ID设为Categories,并将其绑定到一个名为CategoriesDataSource的ObjectDataSource.该ObjectDataSource调用CategoriesBLL class类的GetCategories方法. 在UPDATE标签里选“(None)”,再点Finish完成设置. 最后设置该DropDownList控件显示CategoryName列,传递CategoryID列的值.
当添加这2个DropDownList控件并绑定到相应的ObjectDataSources后,你的屏幕看起来应该和图9差不多:
图9:“头部行”包含显示Suppliers和Categories的DropDownList控件
我们现在需要创建收集每个产品的name和price信息的TextBox控件。在下面的每行对应的name和price方格里各拖放一个TextBox控件. 分别设置它们的ID为ProductName1, UnitPrice1,ProductName2, UnitPrice2,依次类推.
对每个price TextBoxes添加一个CompareValidator控件,设置其ControlToValidate属性为相应控件的ID值.同时将Operator属性设置为GreaterThanEqual,ValueToCompare 属性设置为“0”, Type属性设置为Currency.这样一来可以保证输入的价格为有效的大于或等于0的货币值.同时将Text属性设置为“*”;ErrorMessage属性为“The price must be greater than or equal to zero. Also, please omit any currency symbols.”。
注意:我们并没有在添加界面里包含任何的RequiredFieldValidator控件,即便是数据库表Products的ProductName不允许为NULL值.举个例子,如果用户只想在前3行输入产品的name和unit price,而最后2行为空,我们就仅仅向数据库添加了3个产品。由于ProductName是必需的,当输入了name值后,我们只需要通过编程检查用户是否输入了该产品的unit price值.我们将在第四步进行该检查.
当用户输入了数据,但如果输入值包含货币符号的话,CompareValidator控件将报告无效数据.在每个unit price TextBoxe控件前添加一个“$”符合,提示用户输入数据的时候忽略货币符号.
最后,在InsertingInterface Panel控件里添加一个ValidationSummary控件,设置其ShowMessageBox属性为true,ShowSummary属性为false.有了这些设置后,当用户输入一个无效的unit price值后,在TextBox控件旁边将会出现一个星号,且ValidationSummary控件将显示一个客户端的消息框,显示相应的错误消息.
此时,你的屏幕看起来和图10差不多.
图10:添加界面现在包含显示产品的Names和Prices的TextBox控件
接下来我们要在底部行添加“Add Products from Shipment” 和 “Cancel”按钮.从工具箱拖2个Button控件到界面的底部,分别设置其ID为AddProducts和CancelButton;同时分别设其Text属性为“Add Products from Shipment”和“Cancel”.此外,将 CancelButton按钮的CausesValidation属性设置为false.
最后,我们需要添加一个Label Web控件来显示有关这2个界面的状态信息.比如:当用户成功地添加了一批产品时我们希望切换到展示界面并显示确认消息.当然,如果用户输入产品信息时只提供了price而没有提供name信息,我们就需要显示一个警告信息,提示用户ProductName是必需的.由于我们需要显示与这2个界面有关的信息,将该控件放在这2个Panel控件的上方.