2010-04-27 7 views
0

Mon code ASP page:Paging 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> 

Code de classe:

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; 

    } 

} 

En cliquant sur le bouton resultDataSource reçoit quelques lignes. Page recharger et nous pouvons voir le résultat dans sgvConversionResults. 10 premières lignes Mais après avoir cliqué sur la page suivante dans le téléavertisseur, nous avons le message "Il n'y a aucun élément à afficher dans cette vue". Lorsque je tente debug je trouve que, après postBack la page (cliquez sur la page suivante) entrée params « ds » est vide, et ds.Rows.Count = 0 etc ... Comme si resultDataSource est devenu vide (( qu'ai-je fait mal?


.

onPostBack toutes les variables obtenir des valeurs par défaut, sgvConversionResults sauver sa structure, mais a des lignes claires Comment puis-je enregistrer l'événement de données sgvConversionResults ???

Répondre

1

peut-être essayer:

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

Votre code semble un peu compliqué cependant, une raison particulière pour laquelle vous utilisez un ObjectDataSource? Parce que vous pouvez lier la datatable directement à la gridview dans le codebehind

+0

Merci, mais n'a pas aidé – funky

1

Je transmets resultDataSource avec ViewState et ce succès de travail!