2010-08-02 24 views
4

我正在使用與SPGridView關聯的OOTB SPGridViewPager控件。這在2007年工作得很好,但現在我們已經升級到2010年,嘗試頁面瀏覽數據集時出現以下錯誤;使用SPGridView的分頁錯誤

System.InvalidCastException:無法將類型爲「System.Int32」的對象轉換爲鍵入「System.String」。 Microsoft.SharePoint.WebControls.SPGridView.set_PageIndex(Int32 value)at Microsoft.SharePoint.WebControls.SPGridViewPager.OnClickNext(EventArgs args)at Microsoft.SharePoint.WebControls.SPGridViewPager.RaisePostBackEvent(String eventArgument)at System.Web.UI.Page .RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串eventArgument)在System.Web.UI.Page.ProcessRequestMain(布爾includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint

我的代碼仍然是參照版本12 Microsoft.SharePoint程序集,所以我不是很確定是什麼改變了導致這個問題

回答

4

同樣的問題在這裏我沒有使用SPGridViewPager控制,但是我只是簡單地調用.PageIndex = e.NewPageIndex;兩者都是Integer類型。我正在使用PageIndexChanging(object sender, GridViewPageEventArgs e)方法進行分配。

不確定在這一點上發生了什麼。我現在在Reflector中查看這個。

我想知道你是否使用DataKeys?看起來在這裏發生了2次演員陣容。見下文。

public override void set_PageIndex(int value) 
{ 
    int pageIndex = this.PageIndex; 
    DataKeyArray dataKeys = this.DataKeys; 
    base.PageIndex = value; 
    if (pageIndex != this.PageIndex) 
    { 
     this.PreviousPageIndex = pageIndex; 
     if ((dataKeys == null) || (dataKeys.Count <= 0)) 
     { 
      this.PreviousPageFirstRowDataKey = null; 
      this.PreviousPageLastRowDataKey = null; 
     } 
     else 
     { 
      **this.PreviousPageFirstRowDataKey = (string) dataKeys[0].Value; 
      this.PreviousPageLastRowDataKey = (string) dataKeys[dataKeys.Count - 1].Value;** 
     } 
    } 
} 

要解決這個問題,我不得不仔細看看我的數據源和數據鍵。我有一組從SQL Server返回的記錄,我正在做的是將它們綁定到POCO。這個類有幾個Integer類型的公共屬性。這些整數是我在網格上的數據鍵。我用一個字符串替換它們的類型,而不是繞過鑄造問題。

希望這是有道理的。它爲我修好了。

+0

謝謝男人,這救了我!然而,這是非常愚蠢的錯誤。 – 2015-04-24 11:29:42

0

哇,看起來這是SPGridViewPager中的一個錯誤。我剛剛面臨同樣的問題,並將數據鍵的類型從int更改爲string解決了問題。感謝評論,它真的幫助我!