2011-10-05 30 views
2

我有問題與排序列在gridView。我想只選擇列中名稱相等的那些行,例如「Finished」排序gridView由適當的列是TemplateField

我的gridView由幾個BoundField和TamplateField組成。當我想通過適當的BoundField進行排序時,我將正確的字符串放在屬性FilterExpression中。例如:

場的GridView: <asp:BoundField DataField="identifier" HeaderText="Case number" SortExpression="identifier" />

所以設置 FilterExpression = "[identifier] LIKE '%" + txtCaseNumber.Text + "%'"

其中標識符是數據字段中的BoundField和在這種情況下一切正常。 但是,當我想從列中選擇適當的行,從TempateField等於Fininish我不知道我該怎麼做。模板列的 的exaple看起來是這樣的:

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

如果有誰知道我能做到這一點?

感謝您的幫助。


這沒關係,但我忘了提一句,我有一個由DropDownList的我從中選擇狀態的我自己的用戶contron(ucCaseFilter)。例如:失敗,InProgress,完成......在這個控件的內部,我創建了公共屬性Filter,並且我想分配字符串值,它將選擇適當的列並對它們進行排序。

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

然後在GridView中使用它:

FilterExpression = ucCaseFilter.Filter; 

我不知道如何獲得列名或其他的辦法,買得起我的排序「狀態」列。

如果我不明白以前的answerd並將其提交給糾正soluti

回答

5

更改<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(); 
    } 
} 
+0

沒關係但是我f orgot提到我有我自己的用戶控制檯(ucCaseFilter),它由我從中選擇狀態的DropDownList組成。例如:失敗,InProgress,完成......在這個控件的內部,我創建了公共屬性Filter,並且我想分配字符串值,它將選擇適當的列並對它們進行排序。 Filter =「[???] ='」+ ddlCaseStatus.SelectedValue +「'」;然後在gridView中使用它: FilterExpression = ucCaseFilter.Filter; 我不知道如何獲得列名或其他方法,使我可以通過「狀態」列排序。 對不起,如果我沒有想到事端 – Jaro