在一般情况下,DataGrid控件每次翻页操作时,都会将数据源中的数据重新调用依次,当数据源中的数据比较多的时候,这样就会浪费系统的资源和降低程序执行的效率,解决的办法就是如同标题所说,依靠自定义实现分页操作.
前台代码:
<asp:datagrid id="DataGrid2" runat="server" PageSize="5" AllowPaging="True" AutoGenerateColumns="False" AllowCustomPaging="True">
<Columns>
<asp:BoundColumn DataField="Productid" HeaderText=" Productid"></asp:BoundColumn>
<asp:BoundColumn DataField="Uniqueid" HeaderText="Uniqueid"></asp:BoundColumn>
<asp:BoundColumn DataField="Station" HeaderText="Station"></asp:BoundColumn>
<asp:BoundColumn DataField="Result" HeaderText="Result"></asp:BoundColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:datagrid>
<asp:button id="Button2" runat="server" Text="显示Datagrid2中的内容"></asp:button>
后台代码:
声明全局变量:
int startIndex=0;
private void Button2_Click(object sender, System.EventArgs e)
{
DataGridDataBindNew();
}
public void DataGridDataBindNew()
{
string model="V810";
OracleConnection conn=new OracleConnection(StoneFunction.neworacleconn(model));
OracleDataAdapter OracleDa=new OracleDataAdapter("select productid,uniqueid,station ,result from v810.stationinfo",conn);
DataSet ds=new DataSet();
try
{
OracleDa.Fill(ds,startIndex,DataGrid2.PageSize,"CurDataTable");
OracleDa.Fill(ds,"AllDataTable");
DataGrid2.VirtualItemCount=ds.Tables["AllDataTable"].Rows.Count;
DataGrid2.DataSource=ds.Tables["CurDataTable"];
DataGrid2.DataBind();
DataGrid2.Visible=true;
}
catch
{
try
{
DataGrid2.CurrentPageIndex=0;
DataGrid2.DataBind();
DataGrid2.Visible=true;
}
catch
{
//this.lblError.Text="No data for selection";
//this.lblError.Visible=true;
}
}
conn.Close();
conn.Dispose();
cmd.Dispose();
}
private void DataGrid2_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid2.CurrentPageIndex=e.NewPageIndex;
startIndex=DataGrid2.PageSize*DataGrid2.CurrentPageIndex;
DataGridDataBindNew();
current_label.Text="当前页:"+DataGrid2.CurrentPageIndex;
}