Сортировать gridView по соответствующему столбцу, который является TemplateField - PullRequest
3 голосов
/ 05 октября 2011

У меня проблема с сортировкой столбца в gridView.Я хочу выбрать только те строки в столбце, имена которых равны, например, «Завершено»

Мой gridView состоит из нескольких полей BoundField и TamplateFields.Когда я хочу отсортировать по правильному BoundField, я помещаю правильную строку в свойство FilterExpression.Например:

Поле в GridView: <asp:BoundField DataField="identifier" HeaderText="Case number" SortExpression="identifier" />

, поэтому я устанавливаю FilterExpression = "[identifier] LIKE '%" + txtCaseNumber.Text + "%'"

, где идентификатор - это DataField в BoundField и в этом случаевсе отлично.Но когда я хочу выбрать подходящие строки из столбца, имя которого равно Fininish из TempateField, я не знаю, как мне это сделать.Пример TemplateField выглядит так:

<asp:TemplateField HeaderText="Status" SortExpression="Status">
                    <ItemTemplate>
                        <asp:Label ID="lblStatus" runat="server" Text='<%# Utils.ConvertToProcessStatus((int)Eval("status"))%>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

Если кто-нибудь знает, как я могу это сделать ??

Спасибо за помощь.


Это нормально, но я забыл упомянуть, что у меня есть собственный пользовательский contron (ucCaseFilter), который состоит из DropDownList, из которого я выбираю статус.Например: Failed, InProgress, Finish ... Внутри этого элемента управления я создаю открытое свойство Filter и хочу назначить строковое значение, которое будет выбирать правильный столбец и сортировать их.

Filter = "[???] = '" + ddlCaseStatus.SelectedValue + "'"; 

Затем в gridView использовать его:

FilterExpression = ucCaseFilter.Filter;

Я не знаю, как получить имя столбца или другой подход, который позволяет мне сортировать по столбцу «Статус».

Если я не понял предыдущего ответа, и это относится кправильное решение

1 Ответ

6 голосов
/ 05 октября 2011

Измените <asp:TempleteField />, чтобы добавить <HeaderTemplate /> разметку с LinkButton следующим образом:

<asp:TemplateField SortExpression="Status">
    <HeaderTemplate>
        <asp:LinkButton ID="lnkSort" runat="server" Text="Status" CommandName="Sort" CommandArgument="Status" />                
    </HeaderTemplate>
</asp:TemplateField>

и grd_RowCommand в дескрипторе события введите команду «Сортировка» и используйте CommandArgument для построения строки фильтра

protected void grd_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("Sort"))
    {
        FilterExpression = e.CommandArgument.ToString() + " LIKE '%" + txtCaseNumber.Text + "%'";
        BindGridView();
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...