2009-07-09 3 views
1

Есть ли у .NET какой-либо встроенный метод, который позволяет фильтровать Gridviews? Я всегда программировал свои фильтры, используя источник данных, созданный динамической хранимой процедурой, которая принимает параметры. Но чтобы сохранить всегда строку фильтра, я должен поместить код для создания элементов управления, которые используются для фильтрации в трех разных местах, когда пейджинг разрешен (Page_load, Gridview_Databound, Page_SaveStateComplete). Похоже, что должен быть лучший способ , Если да, то как?Встроенная функция Gridview Filtering?

ответ

5

Только если вы выполняете работу. Проверьте

http://blog.evonet.com.au/post/Creating-a-Stylish-looking-Gridview-with-Filtering.aspx


Как было отмечено в комментариях, этот сайт не доступен.

Шаг 1:: берется непосредственно из записи в блоге Bartek Marnane в вы можете найти на web.archive.com следующие Создание Gridview и Datasource

Создание простой Gridview и Datasouce. В этом примере я использую SQL Datasource, но я рекомендую использовать ObjectDataSource для производственных сред. Установите ConnectionString в значение в файле web.config и ItemStyle-Width для каждого из ваших полей в зависимости от типа данных и количества свободного места.

<asp:GridView ID="Gridview1" runat="server" AutoGenerateColumns="False" AllowPaging="True" 
 
AllowSorting="true" DataSourceID="dsGridview" Width="650px" PageSize="20" 
 
CssClass="Gridview"> 
 
<Columns> 
 
    <asp:BoundField DataField="id" HeaderText="id" SortExpression="id" 
 
     ItemStyle-Width="50px" ItemStyle-HorizontalAlign="Center" /> 
 
    <asp:BoundField DataField="FirstName" HeaderText="Sort" SortExpression="FirstName" 
 
     ItemStyle-Width="150px" /> 
 
    <asp:BoundField DataField="LastName" HeaderText="Sort" SortExpression="LastName" 
 
     ItemStyle-Width="150px" /> 
 
    <asp:BoundField DataField="Department" HeaderText="Sort" SortExpression="Department" 
 
     ItemStyle-Width="150px" /> 
 
    <asp:BoundField DataField="Location" HeaderText="Sort" SortExpression="Location" 
 
     ItemStyle-Width="150px" /> 
 
</Columns> 
 
</asp:GridView> 
 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
 
ConnectionString="<%$ ConnectionStrings:EvonetConnectionString %>" 
 
SelectCommand="SELECT * FROM [T_Employees]" />

Шаг 2: Создайте таблицу, используемую для GridView заголовков

Теперь мы создадим простую таблицу для хранения заголовков и фильтра выпадающего окна.

<table style="width: 650px" border="0" cellpadding="0" cellspacing="1" 
 
class="GridviewTable"> 
 
<tr> 
 
    <td style="width: 50px;"> 
 
     ID 
 
    </td> 
 
    <td style="width: 150px;"> 
 
     First Name 
 
    </td> 
 
    <td style="width: 150px;"> 
 
     Last Name 
 
    </td> 
 
    <td style="width: 150px;"> 
 
     Department 
 
    </td> 
 
    <td style="width: 150px;"> 
 
     Location 
 
    </td> 
 
</tr> 
 
<tr> 
 
    <td style="width: 50px;"> 
 
    </td> 
 
    <td style="width: 150px;"> 
 
    </td> 
 
    <td style="width: 150px;"> 
 
    </td> 
 
    <td style="width: 150px;"> 
 
     <asp:DropDownList ID="ddldepartment" DataSourceID="dsPopulateDepartment" 
 
      AutoPostBack="true" DataValueField="department" runat="server" Width="130px" 
 
      Font-Size="11px" AppendDataBoundItems="true"> 
 
      <asp:ListItem Text="All" Value="%"></asp:ListItem> 
 
     </asp:DropDownList> 
 
    </td> 
 
    <td style="width: 150px;"> 
 
     <asp:DropDownList ID="ddlLocation" DataSourceID="dsPopulateLocation" 
 
      AutoPostBack="true" DataValueField="location" runat="server" Width="130px" 
 
      Font-Size="11px" AppendDataBoundItems="true"> 
 
      <asp:ListItem Text="All" Value="%"></asp:ListItem> 
 
     </asp:DropDownList> 
 
    </td> 
 
</tr> 
 
<tr> 
 
    <td colspan="5"> 
 
     <asp:GridView ID="Gridview1" runat="server" AutoGenerateColumns="False" 
 
      AllowPaging="True" AllowSorting="true" DataSourceID="dsGridview" 
 
      Width="650px" PageSize="10" CssClass="Gridview"> 
 
      <Columns> 
 
       <asp:BoundField DataField="id" HeaderText="Sort" SortExpression="id" 
 
        ItemStyle-Width="50px" ItemStyle-HorizontalAlign="Center" /> 
 
       <asp:BoundField DataField="FirstName" HeaderText="Sort" 
 
        SortExpression="FirstName" ItemStyle-Width="150px" /> 
 
       <asp:BoundField DataField="LastName" HeaderText="Sort" 
 
        SortExpression="LastName" ItemStyle-Width="150px" /> 
 
       <asp:BoundField DataField="Department" HeaderText="Sort" 
 
        SortExpression="Department" ItemStyle-Width="150px" /> 
 
       <asp:BoundField DataField="Location" HeaderText="Sort" 
 
        SortExpression="Location" ItemStyle-Width="150px" /> 
 
      </Columns> 
 
     </asp:GridView> 
 
    </td> 
 
</tr> 
 
</table>

Для последней ячейки, установите значение Colspan Td числу полей в GridView. Переместите Gridview в последнюю ячейку.

Шаг 3: Создание стилей

Стилевая, что я использую имеет следующие пункты:

.GridviewDiv {font-size: 62.5%; font-family: 'Lucida Grande', 
 
    'Lucida Sans Unicode', Verdana, Arial, Helevetica, sans-serif; color: #303933;} 
 
Table.Gridview{border:solid 1px #df5015;} 
 
.GridviewTable{border:none} 
 
.GridviewTable td{margin-top:0;padding: 0; vertical-align:middle } 
 
.GridviewTable tr{color: White; background-color: #df5015; height: 30px; text-align:center} 
 
.Gridview th{color:#FFFFFF;border-right-color:#abb079;border-bottom-color:#abb079; 
 
    padding:0.5em 0.5em 0.5em 0.5em;text-align:center} 
 
.Gridview td{border-bottom-color:#f0f2da;border-right-color:#f0f2da; 
 
    padding:0.5em 0.5em 0.5em 0.5em;} 
 
.Gridview tr{color: Black; background-color: White; text-align:left} 
 
:link,:visited { color: #DF4F13; text-decoration:none }

Вы должны быть в состоянии просто скопировать это в ваш css-файл, не затрагивая ваши текущие таблицы стилей, хотя будьте осторожны, если вы уже установили: ссылку и: посетили на своем сайте.

Шаг 4: Добавьте фильтрацию выпадающие окна и источники данных

В таблице, созданной на шаге 2, добавьте DropDownList к каждой из ячеек во втором ряду, которые содержат поле, которое вы хотите фильтровать , Убедитесь, что выпадающий список eac меньше, чем ячейка, в которую он входит, иначе границы вашей таблицы не будут выровнены. Настройте источник данных, который получает каждое возможное значение этого поля в вашей таблице.Я делаю это, запустив DISTINCT для всех значений в таблице я фильтровальные:

<asp:DropDownList ID="ddldepartment" DataSourceID="dsPopulateDepartment" 
 
AutoPostBack="true" DataValueField="department" runat="server" Width="130px" Font-Size="11px" 
 
AppendDataBoundItems="true"> 
 
    <asp:ListItem Text="All" Value="%"></asp:ListItem> 
 
</asp:DropDownList> 
 
<asp:SqlDataSource ID="dsPopulateDepartment" runat="server" 
 
ConnectionString="<%$ ConnectionStrings:EvonetConnectionString %>" SelectCommand="SELECT 
 
DISTINCT Department from [T_Employees]"></asp:SqlDataSource>

Создать столько DropDownLists как поля, которые вы хотели бы фильтровать.

Несколько вещей отметить:

Установите AppendDataBoundItems = True свойство для DropDownList, как он будет заполнен во время выполнения. Установите свойство AutoPostBack = True, чтобы Gridview обновлялся при изменении выбора. Убедитесь, что для вашего списка ListItem для «Все» значение «%» указано в качестве значения. Ваше выражение фильтра будет SELECT * FROM [TABLE NAME] Где [FieldName], например '{0}%', где {0} - это значение в раскрывающемся списке. Если ваш раскрывающийся список установлен для всех, тогда строка запроса будет SELECT * FROM [TABLE NAME], где [FieldName], например, «%%», которая в SQL возвращает все значения.

Шаг 5: Добавьте фильтрацию Datasource вашего GridView в

Добавить FilterExpress так Datasource ваш GridView, такие как

[Field1] как '{0}%' и [Field2] как «{1 }% 'и [Field3], например' {2}% 'и [Field4], например' {3}% 'и ... и т. д.

Ваши поля затем необходимо добавить в раздел FilterParameters в том же порядке, что и ваш фильтр выражение. Раздел FilterParameters ссылается на SelectedValue ваших dropdownlists.

<asp:SqlDataSource ID="dsGridview" runat="server" 
 
    ConnectionString="<%$ ConnectionStrings:EvonetConnectionString %>" 
 
    SelectCommand="SELECT * FROM [T_Employees]" FilterExpression="Department like '{0}%' 
 
    and Location like '{1}%'"> 
 
    <FilterParameters> 
 
     <asp:ControlParameter Name="Department" ControlID="ddldepartment" 
 
      PropertyName="SelectedValue" /> 
 
     <asp:ControlParameter Name="Location" ControlID="ddllocation" 
 
      PropertyName="SelectedValue" /> 
 
    </FilterParameters> 
 
</asp:SqlDataSource>

Вот так!

+0

Прохладный. Мне нравится сайт. Благодаря! +1 – Eric

+0

Ссылка в ответе мертва - * «Этот сайт не может быть достигнут/DNS-сервер blog.evonet.com.au DNS не найден» * – Pang

+0

Я нашел запись в блоге на web.archive.org и обновил свой ответ, вставив основной текст из Bartek Marnane –

Смежные вопросы