使用LINQDataSource和DropDownList过滤GridView

Visual Studio中使用LINQDataSource和DropDownList来过滤GridView显示的数据是一个常见的需求。本文将介绍如何通过Visual Studio的设计器模式来实现这一功能。将使用LINQ to SQL实体类,这些类包含在名为VehiclesData.dbml的.dbml文件中。车辆型号将显示在GridView中,并通过DropDownList按制造商进行过滤。

设置GridView

首先,向GridView添加一个LinqDataSource控件。展开GridView的“智能任务”,选择“新建数据源”。在数据类型中选择LINQ(在本例中将其命名为GridViewDataSource)。点击OK。配置GridViewDataSource以使用VehicleModels表。

展开GridView的“智能任务”,选择适当的DataContext(在例子中是VehiclesDataDataContext),点击Next。选择VehicleModel表。注意,要使GridView自动具有编辑、更新、删除功能,必须选择表中的所有字段。点击Finish。将设置GridView仅显示名称列,并允许排序和分页。

设置DropDownList

配置DropDownList以列出VehicleManufacturers表中的Manufacturer列:

添加另一个LinqDataSource(这里命名为DropDownDataSource)。展开DropDownDataSource的“智能任务”,选择“配置数据源”,选择VehiclesDataDataContext。现在选择VehicleManufacturers表,仅选择Manufacturer和ID列。需要Manufacturer列显示在列表中,ID列用于绑定。

配置DropDownList以显示Manufacturer列中的数据。打开DropDownList的“智能任务”,选择“选择数据源”。选择DropDownDataSource。对于数据字段(显示在列表中的字段),选择Manufacturer,对于数据值,需要ID。

设置DropDownList过滤GridView中显示的数据

设置GridViewDataSource的'Where'子句。打开GridViewDataSource的“智能任务”,选择“配置数据源”,点击Next,然后选择Where。VehicleManufacturerID是VehicleModels表中的外键,需要与VehicleManufacturer表中的ID列关联。

点击Add,然后点击OK。将DropDownList的AutoPostBack设置为true。到目前为止,已经实现了预期的功能,但GridView仅显示了DropDownList的过滤选择。

添加“显示全部”列表项:展开DropDownList的“智能任务”,选择“编辑项”。添加新项,命名为“显示全部”,对于值,输入-1。点击OK。将DropDownList的AppendDataBoundItems设置为true。

转到GridViewDataSource的源代码并进行如下更改:

<asp:linqdatasource id="GridViewDataSource" runat="server" contexttypename="WebApplication1.VehiclesDataDataContext" tablename="VehicleModels" where="(VehicleManufacturerID == @VehicleManufacturerID) || (@VehicleManufacturerID == @ShowAll)"> <WhereParameters> <asp:ControlParameter ControlID="ddManufacturers" Name="VehicleManufacturerID" PropertyName="SelectedValue" Type="Int32" /> <asp:Parameter Name="ShowAll" Type="Int32" DefaultValue="-1" /> </WhereParameters> </asp:linqdatasource>

这样,添加了一个辅助参数来扩展LINQ查询的Where子句。

C#代码如下:

where = "(VehicleManufacturerID == @VehicleManufacturerID) || (@VehicleManufacturerID == @ShowAll)"

借助额外的参数:

<asp:Parameter Name="ShowAll" Type="Int32" DefaultValue="-1" />
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485