在ASP.NET 2.0中操作数据之二十三:基于用户对修改(3)

  我们的页面此刻不管从Suppliers下拉框中选择哪个供应商,都能看到所有的供应商信息。为了只显示选择的供应商信息,我们需要添加另外一个ObjectDataSource到页面,用来获取一个特定的供应商信息。

  在页面上添加一个新的ObjectDataSource控件,命名为SingleSupplierDataSource。在标签智能标签中,点击Configure Data Source的链接,让它使用SuppliersBLL类的GetSupplierBySupplierID(supplierID)方法。和AllSuppliersDataSource这个控件一样,把SingleSupplierDataSource控件的Update()方法指向到SuppliersBLL类的UpdateSupplierAdress方法。

/uploads/allimg/200612/1K63L0E_0.png

图7:配置SingleSupplierDataSource ObjectDataSource控件并使用GetSupplierBySupplierID(supplierID)方法

  接下来,提示我们需要为GetSupplierBySupplierID(supplierID)方法的supplierID参数指定参数来源。因为我们想要从下拉框选择的供应商来显示信息,这里我们选择Suppliers下拉框的SelectedValue属性作为参数来源。

/uploads/allimg/200612/1K63K544_0.png

图8:使用Suppliers下拉框作为supplierID参数来源

  即使我们添加了第二个ObjectDataSource,目前的DetailsView仍然是使用AllSuppliersDataSource这个ObjectDataSource控件。我们需要添加一些逻辑,根据选择不同的Suppliers中的供应商来调整数据源的使用。为了做到这些,可以为Suppliers下拉框添加一个SelectedIndexChanged事件的处理器。可以通过最简单地在设计器中双击下拉框完成。这个事件处理器需要决定使用什么数据源,而且需要重新绑定数据道DetailsView控件。下面是完成功能的代码:

protected void Suppliers_SelectedIndexChanged(object sender, EventArgs e) { if (Suppliers.SelectedValue == "-1") { // The "Show/Edit ALL" option has been selected SupplierDetails.DataSourceID = "AllSuppliersDataSource"; // Reset the page index to show the first record SupplierDetails.PageIndex = 0; } else // The user picked a particular supplier SupplierDetails.DataSourceID = "SingleSupplierDataSource"; // Ensure that the DetailsView is in read-only mode SupplierDetails.ChangeMode(DetailsViewMode.ReadOnly); // Need to "refresh" the DetailsView SupplierDetails.DataBind(); }

  这个事件处理器由是否选择“显示/编辑所有的供应商“来触发。如果选择,它会设置SupplierDetails这个DetailsView控件的DataSourceID为AllSuppliersDataSource控件,并且通过指定PageIndex为0来使得用户看到这些供应商中的第一条记录。然而,如果用户从下拉框选择了一个特定的供应商,DetailsView的DataSourceID将会被设置成SingleSuppliersDataSource。不管使用哪一种数据源,SuppliersDetails将会被设置成只读模式,通过调用SuppliersDetails控件的DataBind()方法来重新绑定DetailsView的数据。

  通过这个事件处理器,DetailsView现在可以显示选择的供应商信息,除非选择了“显示/编辑所有的供应商“,那样所有的供应商可以通过分页被浏览。图9显示了选择了“显示/编辑所有的供应商“的页面,注意分页界面的实现,允许用户访问和更新供应商信息。图10显示了选择的Ma Maison供应商信息。这种情况下只有Ma Maison的信息是可以被浏览和编辑的。

/uploads/allimg/200612/1K63R964_0.png

图9:所有的供应商信息可以被浏览和编辑

/uploads/allimg/200612/1K642NQ_0.png

图10:只有选择的供应商信息才能被浏览和编辑

  注意:对于这个教程,DropDownList和DetailsView控件的EnableViewState都必须设置成默认的true,这是因为改变DropDownList的SelectedIndex和DetailsView的DataSourceID属性,必须在回传的时候被记录。

第四步:在一个可编辑的GridView中列出供应商信息

  随着DetailsView的完成,我们下一步要根据选择的供应商提供一个可以编辑的GridView。这个GridView控件应该只允许编辑ProductName和QuantityPerUnit属性。此外,如果用户是一个特定的供应商,并且访问这个页面,应该允许他能够更新那些可以没有过时的产品。为了实现这些我们首先需要给ProductBLL类添加一个重载的UpdateProducts方法,让它使用ProductID,ProductName,以及QuantityPerUnit作为输入参数。在前面的教程中我们已经做过类似的操作,所以这里我们仅看一下需要添加到ProductsBLL类中的代码:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwwsy.html