65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 LinqDataSource 和带有 LinqDataSource 的下拉列表添加“显示全部”选项到 GridView 数据过滤器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2011 年 10 月 31 日

CPOL

2分钟阅读

viewsIcon

38917

如何向 DropDownList 添加“显示全部”选项,该选项用作 GridView 的数据筛选器,且 LinqDataSource 上没有代码隐藏。

引言

这是一种非常快速的方法(有点像解决方法),通过 LinqDataSource,使用 Visual Studio 设计器模式,在 GridView 的下拉列表筛选器中实现“显示全部”选项。

在此示例中,我们使用 LINQ to SQL 实体类(如下图所示),这些实体类包含在名为 *VehiclesData.dbml* 的 * .dbml* 文件中。 车辆模型将列在 GridView 中,并由其制造商通过下拉列表进行筛选。

Alternate Text

设置 GridView

  1. GridView 添加一个 LinqDataSource 控件。
    • 展开 GridView 的“智能任务”,然后选择 *新建数据源*。
    • Alternate Text

    • 对于数据类型,选择 *LINQ*(在此示例中,我们将其命名为 GridViewDataSource)。
    • Alternate Text

    • 单击 *确定*。
  2. 配置 GridViewDataSource 以使用 VehicleModels 表。
    • 展开 GridView 的“智能任务”
    • GridView SmartTasks

    • 选择适当的 DataContext(在我们的例子中是 VehiclesDataDataContext),单击 *下一步*。
    • 选择 VehicleModel 表。
    • 注意:要在 GridView 中自动提供编辑、更新、删除功能,必须选择表中的所有字段。

      VehicleModel table

    • 单击“完成”。

我们将设置 GridView 仅显示 Name 列并允许排序和分页。

Alternate Text

设置 DropDownList

  1. 配置 DropDownList 以列出 VehicleManufacturers 表中的 Manufacturer 列
    • 添加另一个 LinqDataSource(此处名称为 DropDownDataSource)。
    • 展开 DropDownDataSource 的“智能任务”,选择 *配置数据源*,选择 VehiclesDataDataContext
    • 现在选择 VehicleManufacturers 表,仅包含 Manufacturer 和 ID 列。 我们需要 Manufacturer 列来在列表中显示它,并且需要 ID 来将所有内容绑定在一起。
    • Alternate Text

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

设置 DropDownList 以筛选 GridView 中显示的数据

  1. 设置 GridViewDataSource 的“Where”子句。
    • 打开 GridViewDataSource 的“智能任务”,选择 *配置数据源*,单击 *下一步*,然后单击 *Where*。
    • Alternate Text

    • VehicleManufacturerID 是 VehicleModels 表中的外键,需要将其与 VehicleManufacturer 表中的 ID 列相关联。“操作方法”如下图所示
    • Alternate Text

    • 单击 *添加*。
    • 单击 *确定*。
    • 将 AutoPostBack="true" 设置为 DropDownList

到目前为止,我们已经使一切正常工作,但 GridView 仅显示 DropDownList 中筛选后的选择。

向 DropDownList 筛选器添加“显示全部”选项

  1. 添加“显示全部”列表项
    • 展开 DropDownList 的“智能任务”,选择 *编辑项*。
    • 添加新项,将其命名为“显示全部”,对于值,输入 -1。
    • Alternate Text

    • 单击 *确定*。
    • AppendDataBoundItems="true" 设置为 DropDownList
    • 转到 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 子句。

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

借助附加参数

<asp:Parameter Name="ShowAll" Type="Int32" DefaultValue="-1" />

但是请记住,它的值绝不能具有 @VehicleManufacturerID 或我们将其等于它的任何参数可能具有的值。

© . All rights reserved.