事前:radgrid控件覆蓋EntityDataSource排序
我用一個靜態的數據庫,這是不能改變的工作,因爲它使用外部軟件。
如果StatusTypeId中的數據庫值不是「1」或「6」,則將其映射到位於這些值之間的值。 背景:Supportticketsystem
的客戶應只看到StatusTypeIds 1,3和6 1(開),3(在工作),6(閉合)
所以我手動更改了網格值,並且現在正在進行正確的排序。
在EntityDataSource上執行的初始排序表達式工作正常,直到使用網格的排序功能。然後,無論我手動截取,排序是不正確的。
EntityDataSource的初步排序:
<asp:EntityDataSource ID="DefectsDataSource" runat="server"
ConnectionString="name=*" DefaultContainerName="*"
EnableFlattening="False" EntitySetName="Defects" Select="it.[DefectId], it.[Name], it.[StatusTypeId]"
OrderBy="(CASE WHEN it.[StatusTypeId] <> 1 AND it.[StatusTypeId] <> 6 THEN 2 ELSE it.[StatusTypeId] END)"/>
有可能獲得來自電網(SortCommand事件)所要求的排序順序,並設置EntityDataSource的OrderBy屬性正確排序? 我試過了,但被忽略了。
實施SortCommand事件:
protected void SortCommand(object sender, GridSortCommandEventArgs e)
{
if (e.SortExpression == "StatusTypeId")
{
string sortExpression = (e.NewSortOrder == GridSortOrder.Ascending) ? "ASC" : e.NewSortOrder == GridSortOrder.Descending ? "DESC" : "";
this.DefectsDataSource.OrderBy = string.Format("(CASE WHEN it.[StatusTypeId] <> 1 AND it.[StatusTypeId] <> 6 THEN 2 ELSE it.[StatusTypeId] END) {0}", sortExpression);
this.RadGrid.Rebind();
}
}
我希望有足夠的信息來幫助我。如果我錯過了什麼,請問我。