2011-11-02 61 views
0

JLAdjustmentList.aspx.cs問題與分選一個gridview,使用模板和綁定列

protected void Page_Load(object sender, EventArgs e) { 
      LoadApprovalList(); 
     } 

     protected override void OnPreRender(EventArgs e) { 
      base.OnPreRender(e); 
      gridAdjustments.DataBind(); 
     } 

     protected void gridAdjustments_OnSorting(object sender, EventArgs e) { 
      LoadApprovalList(); 
     } 

     private void LoadApprovalList() { 
      if (PermissionHelper.IsPermissionGranted(Permission.JLAdjustmentView)) { 
       gridAdjustments.DataSource = Facade.AdAdjustment.GetListForAdministrator(); 
       Page.Title = "JL Adjustments List"; 
      } else if (PermissionHelper.IsPermissionGranted(Permission.JLAdjustmentApprove)) { 
       gridAdjustments.DataSource = 
        Facade.AdAdjustment.GetListForAdministrator(); 
       Page.Title = "JL Adjustments Approval"; 
      } else if (PermissionHelper.IsPermissionGranted(Permission.JLAdjustmentEdit)) { 
       gridAdjustments.DataSource = 
        Facade.AdAdjustment.GetListForManager(Current.User.Id); 
       Page.Title = "JL Adjustments List"; 
      } 
     } 

     protected string GetBillableHours(AdAdjustmentListData adjustmentListData) { 
      return TimeFormat.MinutesToString(adjustmentListData.BillableHoursSum); 
     } 

     protected string GetNonBillableHours(AdAdjustmentListData adjustmentListData) { 
      return TimeFormat.MinutesToString(adjustmentListData.NonBillableHoursSum); 
     } 

     protected string GetDetailLink(AdAdjustmentListData adjustmentListData) { 
      if (PermissionHelper.IsPermissionGranted(Permission.JLAdjustmentEdit)) { 
       return string.Format("~/JLAdjustmentEdit.aspx?Id={0}", adjustmentListData.AdjustmentId); 
      } 
      return string.Format("~/JLAdjustmentView.aspx?Id={0}", adjustmentListData.AdjustmentId); 
     } 
    } 
} 

JLAdjustmentList.aspx

<it:GridView runat="server" ID="gridAdjustments" CssClass="object_list" OnSorting="gridAdjustments_OnSorting"> 
     <Columns> 
      <it:BoundField DataField="AdjustmentId" HeaderText="Id" SortExpression="AdjustmentId" /> 
      <it:BoundField DataField="Week.DisplayName" HeaderText="Week Ending Date" SortExpression="Week.DisplayName" /> 
      <it:BoundField DataField="EmployeeFullName" HeaderText="USERID" SortExpression="EmployeeFullName" /> 
      <it:BoundField DataField="DepartmentFullName" HeaderText="Department" SortExpression="DepartmentFullName" /> 
      <it:BoundField DataField="Portfolio" HeaderText="Portfolio" SortExpression="Portfolio" /> 
      <asp:TemplateField HeaderText="Billable Hours Changed"> 
       <ItemStyle Width="70px"></ItemStyle> 
       <ItemTemplate> 
        <%# GetBillableHours((AdAdjustmentListData)Container.DataItem) %> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Non-Billable Hours Changed"> 
       <ItemStyle Width="70px"></ItemStyle> 
       <ItemTemplate> 
        <%# GetNonBillableHours((AdAdjustmentListData)Container.DataItem)%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <it:BoundField DataField="Reason" HeaderText="Reason For Adjustment" /> 
      <it:BoundField DataField="StatusName" HeaderText="Status" SortExpression="StatusName" /> 
      <it:BoundField DataField="LastChangedDateFormatted" HeaderText="Date of Last Action" /> 
      <asp:TemplateField HeaderText="Details"> 
       <ItemTemplate><center> 
        <asp:ImageButton runat="server" ImageUrl="~/img/edit.gif" 
         PostBackUrl='<%# GetDetailLink((AdAdjustmentListData)Container.DataItem) %>' /></center> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </it:GridView> 

SortHelper.cs

public static class SortHelper { 
     private static Dictionary<Type, Dictionary<String, ITypedSorter>> cache; 

     static SortHelper() { 
      cache = new Dictionary<Type, Dictionary<String, ITypedSorter>>(); 
     } 

     public static IEnumerable Sort(this IEnumerable enumerable, string propertyName, bool desc) { 
      if (enumerable != null) { 
       if (enumerable is IQueryable) { 
        var itemType = (enumerable as IQueryable).ElementType; 
        var sorter = EnsureSorter(itemType, propertyName); 
        return sorter.Sort(enumerable, desc); 
       } 
       else { 
        var enumerator = enumerable.GetEnumerator(); 
        enumerator.Reset(); 
        if (enumerator.MoveNext()) { 
         var itemType = enumerator.Current.GetType(); 
         var sorter = EnsureSorter(itemType, propertyName); 
         return sorter.Sort(enumerable, desc); 
        } 
       } 
      } 
      return enumerable; 
     } 

我不斷收到「不支持指定的方法」。如果AT(enumerator.MoveNext()){

堆棧跟蹤

at Microsoft.Data.Extensions.Materializer`1.<Materialize>d__0.System.Collections.IEnumerator.Reset() 
    at satispu.Utils.Helpers.SortHelper.Sort(IEnumerable enumerable, String propertyName, Boolean desc) in D:\Documents and Settings\aolaol\Desktop\Source_Build2\satispu.Utils\Helpers\SortHelper.cs:line 24 
    at satispu.Web.Controls.GridView.OnDataBinding(EventArgs e) in D:\Documents and Settings\aolaol\Desktop\Source_Build2\satispu.Web\Controls\GridView.cs:line 119 
    at System.Web.UI.WebControls.DataBoundControl.PerformSelect() 
    at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() 
    at System.Web.UI.WebControls.GridView.DataBind() 
    at satispu.Web.JournalAdjustmentList.OnPreRender(EventArgs e) in D:\Documents and Settings\aolaol\Desktop\Source_Build2\satispu.Web\JournalAdjustmentList.aspx.cs:line 19 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

可能是什麼問題,或者你會建議什麼解決這個問題,或者啓用排序是這樣的GridView控件。

繼承人的呼叫

public IEnumerable<ADAdjustmentListData> Adjustment_GetListForAdministrator(int year) { 
    return this.CreateStoreCommand(
     "GetListForAdministrator", 
     CommandType.StoredProcedure, 
     new SqlParameter("@Year", year) 
    ).Materialize<ADAdjustmentListData>(); 
} 




    void GridView_Sorting(object sender, System.Web.UI.WebControls.GridViewSortEventArgs e) { 
      if (!String.IsNullOrEmpty(e.SortExpression)) { 
       ToggleSorting(e); 
      } 
      if (Sorting != null) { 
       e.SortDirection = SortDirection; 
       Sorting(sender, e); 
      } 
     } 
+0

在哪裏SortHelper調用? –

+0

我正在使用調用sorthelper的ASP.net gridview的擴展。 –

+0

我應該發佈一些代碼 –

回答

1

我假設你正在使用實體框架或LINQ到SQL ......如果是這樣,您使用的SortHelper LINQ查詢,這將會對數據庫內。當它這樣做時,它會嘗試將SortHelper轉換爲SQL,但它不會這樣做,並引發該錯誤。舉例來說,如果你這樣做:

var q = from o in ctx.Users select new { SortedResults = SortHelper.Sort(q) }; 

這將失敗,因爲它會嘗試SortHelper.Sort翻譯爲SQL方法。但是,只有當它不以期望的方式修改結果集時,它才能正常工作。

var q = from o in ctx.Users select o; 
return SortHelper.Sort(q); 

,以確保其工作的最佳方法是查詢之後調用ToList() - ToList()執行查詢,然後一切之後是LINQ到對象操作:

var q = (from o in ctx.Users select o).ToList(); 
return SortHelper.Sort(q); 
+0

嗯,即使我的數據源使用Facade.AdAdjustment.GetListForManager(Current.User.Id),這是真的;這是一個可數名單? –

+0

我發佈了我的數據是如何檢索的 –

+0

但我實際上需要查看哪裏SortHelper被調用,我沒有在上面看到。 –