我用DataGrid 绑定数据!分页
为了查找方便, 设置一搜索 输入要搜索的关键字后 搜索!DataGrid重新绑定 ,显示搜索的结果!但问题是:如果当前页是第一页,则可得到正确结果! 如果当前页不是第一页,则,就会报错!请教各位这是怎么回事!!有什么好的方法解决!!谢谢!!
为了查找方便, 设置一搜索 输入要搜索的关键字后 搜索!DataGrid重新绑定 ,显示搜索的结果!但问题是:如果当前页是第一页,则可得到正确结果! 如果当前页不是第一页,则,就会报错!请教各位这是怎么回事!!有什么好的方法解决!!谢谢!!
当你搜索的数据只有1页时,而你原来的页面在2页上,所以会报错!
DataGrid.CurrentPageIndex = 0
if(DataGrid1.CurrentPageIndex<0 || DataGrid1.CurrentPageIndex>PageCount(总页数))
{
DataGrid1.CurrentPageIndex=0;
}
//--paging
int PageSum = 0;
int RowCount = DataTableRequirement.Rows.Count;
int PageSize = this.DataGridRequirements.PageSize;if(RowCount % PageSize == 0)
{
PageSum = RowCount / PageSize ; //divide exactly
}
else
{
PageSum = RowCount / PageSize+1; //not divide exactly
}
if(RowCount == 0)
{
PageSum = 1; //initial paging
}
if(this.DataGridRequirements.CurrentPageIndex >= PageSum)
{
this.DataGridRequirements.CurrentPageIndex = PageSum - 1;
}
//--end paging
DataGrid.CurrentPageIndex=-1
DataGrid.CurrentPageIndex = 0;
肯定是查询后的页数只有一页,而你当时指定是第二或第三页,当然会出错了,是不是报索引超过啊,这种错误看多了就知道了
Private Sub btserch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btserch.Click
Dim Cprotol As Integer Select Case dltype.SelectedIndex
Case 0
'基于协议的搜索
SqlCommand1.CommandText = "SELECT sid, cid, sig_name, DATEADD(hour, 8, timestamp) AS Expr1, dbo.INET_NTOA(ip_src) AS Expr2, dbo.INET_NTOA(ip_dst) AS Expr3, dbo.NProtol(ip_proto) AS Expr4, sport, dport FROM Myanalyzer where dbo.Nprotol(ip_proto)='" & dlProtol.SelectedItem.Text & "'"
SqlDataAdapter1.SelectCommand = SqlCommand1
Try
DataSetSerch1.EnforceConstraints = False
DataSetSerch1.Clear()
SqlDataAdapter1.Fill(DataSetSerch1)
DataGrid1.DataBind()
Catch ex As Exception
Me.Response.Write(ex.Message)
End Try
Case 1
'基于时间的搜索
SqlCommand1.CommandText = "SELECT sid, cid, sig_name, DATEADD(hour, 8, timestamp) AS Expr1, dbo.INET_NTOA(ip_src) AS Expr2, dbo.INET_NTOA(ip_dst) AS Expr3, dbo.NProtol(ip_proto) AS Expr4, sport, dport FROM Myanalyzer where DATEADD(hour, 8, timestamp)>'" & tbFrom.Text & "' and DATEADD(hour, 8, timestamp)<'" & tbTo.Text & "'"
SqlDataAdapter1.SelectCommand = SqlCommand1
Try
DataSetSerch1.EnforceConstraints = False
DataSetSerch1.Clear()
SqlDataAdapter1.Fill(DataSetSerch1)
DataGrid1.DataBind()
Catch ex As Exception
Me.Response.Write(ex.Message)
End Try
Case 2
'综合搜索
SqlCommand1.CommandText = "SELECT sid, cid, sig_name, DATEADD(hour, 8, timestamp) AS Expr1, dbo.INET_NTOA(ip_src) AS Expr2, dbo.INET_NTOA(ip_dst) AS Expr3, dbo.NProtol(ip_proto) AS Expr4, sport, dport FROM Myanalyzer where DATEADD(hour, 8, timestamp)>'" & tbFrom.Text & "' and DATEADD(hour, 8, timestamp)<'" & tbTo.Text & "'and dbo.Nprotol(ip_proto)='" & dlProtol.SelectedItem.Text & "'"
SqlDataAdapter1.SelectCommand = SqlCommand1
Try
DataSetSerch1.EnforceConstraints = False
DataSetSerch1.Clear()
SqlDataAdapter1.Fill(DataSetSerch1)
DataGrid1.DataBind()
Catch ex As Exception
Me.Response.Write(ex.Message)
End Try
End Select
End Sub
Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
'实现分页功能 DataGrid1.CurrentPageIndex = e.NewPageIndex
btserch_Click(Me, e)
End Sub
解决的方法是,将你的搜索函数写在Currentindex里面,这样你就可以保持你的SqlDataAdapter为搜索状态,从而成功分页了。