2010-04-27 125 views
0

我的ASP頁面代碼:尋呼的ObjectDataSource

<asp:ObjectDataSource runat="server" ID="odsResults" OnSelecting="odsResults_Selecting" /> 
    <tr><td> 
    <wssawc:SPGridViewPager ID="sgvpPagerTop" runat="server" GridViewId="sgvConversionResults" /> 
    </td></tr> 
    <tr> 
     <td colspan="2" class="ms-vb"> 
      <wssawc:SPGridView 
       runat="server" 
       ID="sgvConversionResults" 
       AutoGenerateColumns="false" 
       RowStyle-CssClass="" 
       AlternatingRowStyle-CssClass="ms-alternating" 
       /> 
     </td> 
    </tr> 

類代碼:

public partial class Convert : System.Web.UI.Page 

{ 
    ... 
    private DataTable resultDataSource = new DataTable(); 
    ... 

    protected void Page_Init(object sender, EventArgs e) 
    { 
     ... 

     resultDataSource.Columns.Add("Column1"); 
     resultDataSource.Columns.Add("Column2"); 
     resultDataSource.Columns.Add("Column3"); 
     resultDataSource.Columns.Add("Column4"); 
     ... 
     odsResults.TypeName = GetType().AssemblyQualifiedName; 
     odsResults.SelectMethod = "SelectData"; 
     odsResults.SelectCountMethod = "GetRecordCount"; 
     odsResults.EnablePaging = true; 
     sgvConversionResults.DataSourceID = odsResults.ID; 
     ConversionResultsCreateColumns(); 
     sgvConversionResults.AllowPaging = true; 
     ... 
    } 

    protected void btnBTN_Click(object sender, EventArgs e) 
    { 
     // add rows into resultDataSource 
    } 

    public DataTable SelectData(DataTable ds,int startRowIndex,int maximumRows) 
    { 
     DataTable dt = new DataTable(); 

     dt.Columns.Add("Column1"); 
     dt.Columns.Add("Column2"); 
     dt.Columns.Add("Column3"); 
     dt.Columns.Add("Column4"); 

     for (int i =startRowIndex; i<startRowIndex+10 ;i++) 
     { 
      if (i<ds.Rows.Count) 
      { 
       dt.Rows.Add(ds.Rows[i][0].ToString(), ds.Rows[i][1].ToString(), 
       ds.Rows[i][2].ToString(), ds.Rows[i][3].ToString()); 
      } 
     } 
     return dt; 
    } 

    public int GetRecordCount(DataTable ds) 
    { 
     return ds.Rows.Count; 
    } 

    protected void odsResults_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) 
    { 
     e.InputParameters["ds"] = resultDataSource; 

    } 

} 

單擊按鈕時resultDataSource接收某些行。網頁重新加載,我們可以在sgvConversionResults中看到結果。前10行。但是,在點擊頁面中的下一頁後,我們會收到消息「在此視圖中沒有顯示的項目」。當我嘗試調試我發現後postBack頁面(單擊下一步頁)輸入PARAMS「DS」是空白,ds.Rows.Count = 0等..彷彿resultDataSource成爲空(( 我做了什麼錯誤?


onPostBack所有的變量得到的默認值,sgvConversionResults救她的結構,但都有明確的行如何節省sgvConversionResults數據onPostBack事件???

回答

1

也許嘗試:

protected void Page_Load(object sender, EventArgs e) 
{ 
    sgvConversionResults.DataBind(); 
} 

雖然您的代碼似乎有點複雜,但您使用ObjectDataSource的任何特定原因?因爲您可以將數據表直接綁定到代碼隱藏中的gridview

+0

謝謝,但沒有幫助 – funky 2010-04-27 16:35:15

1

我使用ViewState傳輸resultDataSource並且此工作成功!