2010-04-27 126 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并且此工作成功!