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

  注意:可以回头参考教程《使用DropDownList过滤的主/从报表 》获得关于添加一个下拉框中“显示所有”选项的详细讨论。通过设置AppendDataBoundItems属性和添加ListItem后,这个DropDownList的声明标记如下所示:

<asp:DropDownList runat="server" AppendDataBoundItems="True" DataSourceID="AllSuppliersDataSource" DataTextField="CompanyName" DataValueField="SupplierID"> <asp:ListItem Value="-1">Show/Edit ALL Suppliers</asp:ListItem> </asp:DropDownList>

/uploads/allimg/200612/1K63B008_0.png

图5是一个当前在浏览器中操作的截图。

  图5:包含一个“Show ALL”的ListItem的Suppliers下拉框,以及其他每个供应商名称

  由于我们想让用户改变选择后,立刻更新用户界面,我们需要设置Suppliers下拉框的AutoPostBack属性值为true。在第二步中我们将创建一个DetailsView控件来显示基于用户选择后显示的供应商详细信息。然后,在第三步中,我们会创建一个下拉框的SelectedIndexChanged事件的处理器,在代码里面我们将根据当前的选择来把具体的供应商信息绑定到DetailsView控件中。

第二步:添加一个DetailsView控件

  让我们使用DetailsView控件来显示供应商信息。对于能够查看和编辑所有供应商信息的用户,这时DetailsView将支持分页,并允许用户逐个查看每个供应商资料。如果用户是其中的某个供应商,这时DetailsView将只显示当前这个供应商信息,而且不会包含分页的界面。在两种情况下,DetailsView都将允许用户能够编辑所能访问到的供应商的地址,城市和国家等属性值。

  在Suppliers下拉框下添加一个DetailsView,并设置它的ID属性为SupplierDetails,然后把它绑定到前面创建的AllSuppliersDataSource ObjectDataSource控件。之后,在DetailsView的智能标签中打开Enable Paging和Enable Editing 的多选框。

  注意:如果你在DetailsView标签代码中没有看到Enable Edit属性,那是因为你没有把ObjectDataSource的Update()方法

  绑定到SuppliersBLL类的UpdateSupplierAddress方法。花一点事件回过去重新设置一下,然后再回来就能看到Enable Edit属性。由于SuppliersBLL类的UpdateSupplierAddress方法只允许有四个参数-supplierID,address,city以及country,需要修改DetailsView的BoundFields让CompanyName和Phone两个BoundFields是read-only。此外,把SupplierID这个BoundField完全删除。最后,这个AllSuppliersDataSource控件已经含有一个OldValuesParameterFormatString属性,值为original_{0}。再花些时间把它完全删除或者修改它的值为默认值{0}。通过对SupplierDetails这个DetailsView控件以及对AllSuppliersDataSource这个ObjectDataSource控件的设置,我们的代码将如下所示:

<asp:ObjectDataSource runat="server" SelectMethod="GetSuppliers" TypeName="SuppliersBLL" UpdateMethod="UpdateSupplierAddress"> <UpdateParameters> <asp:Parameter Type="Int32" /> <asp:Parameter Type="String" /> <asp:Parameter Type="String" /> <asp:Parameter Type="String" /> </UpdateParameters> </asp:ObjectDataSource> <asp:DetailsView runat="server" AllowPaging="True" AutoGenerateRows="False" DataKeyNames="SupplierID" DataSourceID="AllSuppliersDataSource"> <Fields> <asp:BoundField DataField="CompanyName" HeaderText="Company" ReadOnly="True" SortExpression="CompanyName" /> <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" /> <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" /> <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" /> <asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True" SortExpression="Phone" /> <asp:CommandField ShowEditButton="True" /> </Fields> </asp:DetailsView>

  这时不管在Suppliers下拉框中选择什么,DetailsView能够被分页浏览,选择的供应商的地址信息也可以被更新。(见图6)

/uploads/allimg/200612/1K63MF5_0.png

图6:任何供应商的信息都可以被查看,并且他的地址可以被更新。

第三步:显示只有被选择的供应商信息

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

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