读书人

100分-改错,该如何解决

发布时间: 2012-02-09 18:22:27 作者: rapoo

100分--改错
细节上没任何问题的。
运行一些正常。
但是在分页的时候。
因为Page_Load里面默认的搜索一次数据。
当我使用条件搜索的时候。
触发了里面的分页事件。
于是搜索的数据点下一页的时候出现的确是没有搜索条件的默然数据。
问了以后才知道Page_Load里面应该写一个判断语句。但是我不知道怎么写。
100分求人指教一下。
<html>
<script runat= "server " language= "c# ">
protected void Page_Load(object sender, EventArgs e)
{
string strConnection= "Provider=Microsoft.Jet.OleDb.4.0;Data Source= ";
strConnection+=Server.MapPath( "1.mdb ");

OleDbConnection objConnection=new OleDbConnection (strConnection);

String ee5= "update jinhuo,DS_ClassInf set jinhuo.classname2=DS_ClassInf.classname where jinhuo.ClassID2=DS_ClassInf.ClassID ";
OleDbCommand objCommand115 = new OleDbCommand(ee5,objConnection);
objCommand115.Connection.Open();
objCommand115.ExecuteNonQuery();
objCommand115.Connection.Close();

String sql = "select bianhao as 教材编号,bookname as 教材名称,shuliang as 进货数量,booktime as 进货时间,Classname as 类别2,Classname2 as 类别1 from jinhuo ORDER by [booktime] desc ";
DataSet ds = new DataSet();
OleDbDataAdapter myada = new OleDbDataAdapter(sql,strConnection);
myada.Fill(ds, "jinhuo ");
dgrdMain.DataSource = ds.Tables[ "jinhuo "].DefaultView;
dgrdMain.DataBind();
bianhao.Text= " ";
}

public void bind(object sender,EventArgs E)
{
string strConnection= "Provider=Microsoft.Jet.OleDb.4.0;Data Source= ";
strConnection+=Server.MapPath( "1.mdb ");

OleDbConnection objConnection=new OleDbConnection (strConnection);

String sql = "select bianhao as 教材编号,bookname as 教材名称,shuliang as 进货数量,booktime as 进货时间,Classname as 类别2,Classname2 as 类别1 from jinhuo where bianhao= ' " + bianhao.Text + " ' and format([booktime], 'yyyy-mm-dd HH:mm:ss ')> = ' "+shijian1.Text+ " ' and format([booktime], 'yyyy-mm-dd HH:mm:ss ') <= ' "+shijian2.Text+ " ' ORDER by [booktime] desc ";
DataSet ds = new DataSet();
OleDbDataAdapter myada = new OleDbDataAdapter(sql,strConnection);
myada.Fill(ds, "jinhuo ");
dgrdMain.DataSource = ds.Tables[ "jinhuo "].DefaultView;
dgrdMain.CurrentPageIndex=0;
dgrdMain.DataBind();
}
public void MyDataGrid_Page(object sender, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
dgrdMain.CurrentPageIndex = e.NewPageIndex;
dgrdMain.DataBind();
}
</script>
<head>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 " />
<title> 无标题文档 </title>
<style type= "text/css ">
<!--
.STYLE3 {font-size: 12px}
.STYLE5 {font-size: 9px}
-->
</style>
</head>
<body bgcolor= "#F1F1F1 ">
<form name= "form1 " method= "post " action= " " runat= "server ">


<table width= "674 " border= "0 " align= "left " cellpadding= "5 " cellspacing= "1 " bgcolor= "#cccccc ">
<tr bgcolor= "#ffffff ">
<td width= "662 " class= "pad "> </FONT>
<p> <span class= "STYLE3 "> 从 </span>
<asp:TextBox ID= "shijian1 " runat= "server " Text= '2007-01-01 24:00:00 ' TextMode= "SingleLine " Width= "150 " CssClass= "STYLE3 "/>
<span class= "STYLE3 "> 至 </span>
<asp:TextBox ID= "shijian2 " runat= "server " Text= '2010-12-30 24:00:00 ' Width= "150 " CssClass= "STYLE3 "/>
<p> <span class= "STYLE3 "> 教材编号: </span>
<asp:TextBox ID= "bianhao " runat= "server "/>
<span class= "STYLE3 ">
<asp:Button ID= "Button1 " Text= "开始查询 " OnClick= "bind " runat= "server " />
<asp:RangeValidator ID= "bianhao1 " runat= "server "
ControlToValidate= "bianhao " ErrorMessage= "请输入正确的教材编号 " Font-Bold= "true " MaximumValue= "10000000000000000 " MinimumValue= "1 " Type= "Double " Display= "Dynamic "> </asp:RangeValidator>
</span>
<td width= "669 " height= "155 "> <asp:DataGrid AllowCustomPaging= "false " AllowPaging= "true " BorderColor= "#999999 " BorderWidth= "1 " CellPadding= "5 " CellSpacing= "0 " CssClass= "STYLE3 " ID= "dgrdMain " PageSize= "5 " runat= "server " OnPageIndexChanged= "MyDataGrid_Page ">
<PagerStyle NextPageText= "下一页 " PrevPageText= "上一页 "> </PagerStyle>
</asp:DataGrid>
</td>
<td width= "97 " colspan= "4 " rowspan= "2 ">   </td>
</tr>
<tr>


</tr>
</table>
<p>   </p>
</form>
</body>
</html>

[解决办法]
protected void Page_Load(object sender, EventArgs e)
{

if(!IsPostBack)
{
string strConnection= "Provider=Microsoft.Jet.OleDb.4.0;Data Source= ";
strConnection+=Server.MapPath( "1.mdb ");

}

[解决办法]
if(!IsPostBack)
[解决办法]
if(!IsPostBack)
{
string strConnection= "Provider=Microsoft.Jet.OleDb.4.0;Data Source= ";
strConnection+=Server.MapPath( "1.mdb ");
}这也是只是日常中很简单的操作方法啊。
[解决办法]
你的PageLoad里面的数据操作部分

放到这里面
if(!IsPostBack)
{
...
}
[解决办法]
if(!IsPostBack)
{
...
}
。。。。。

[解决办法]
来迟一步,常见问题。if(!IsPostBack)

[解决办法]
同上
if(!IsPostBack) 表示页面第一次加载时候运行的代码

你没有加这个 每回提交的时候都会运行 所以老显示的是初始数据
[解决办法]
if (!page.ispostback)
{
页面第一次加载时候运行
}

[解决办法]
protected void Page_Load(object sender, EventArgs e)
{

if(!IsPostBack)
{
string strConnection= "Provider=Microsoft.Jet.OleDb.4.0;Data Source= ";
strConnection+=Server.MapPath( "1.mdb ");

}
100分
[解决办法]
问题依然没有解决。
输入搜索教材编号6。
出现数据。
点击下一页。
又出现没有条件的数据。
搜索的条件失效。
-------------
见你的50分那贴,已解答
[解决办法]
给你篇文章,估计能够解决你的问题.


专栏作品
Henry手记—Web Form中的Datagrid的自定义分页
韩睿
________________________________________

图1 分页设置

"第一页 ":

DataGrid1.CurrentPageIndex = 0;

"上一页 ":

if (DataGrid1.CurrentPageIndex > 0)

DataGrid1.CurrentPageIndex -= 1;

"下一页 ":

if (DataGrid1.CurrentPageIndex < (DataGrid1.PageCount - 1))

DataGrid1.CurrentPageIndex += 1;

"最后一页 ":

DataGrid1.CurrentPageIndex = (DataGrid1.PageCount - 1);

private void SetGridSource()

{

SqlConnection MyConnection = new SqlConnection(YourOwnConnectionString);

string SelectCommand = "SELECT * FROM YOURTABLE ";

SqlDataAdapter MyCommand = new SqlDataAdapter(SelectCommand, MyConnection);

DataSet ds = new DataSet();

MyCommand.Fill(ds, " YOURTABLE ");

DataView dv = ds.Tables[ "YOURTABLE "].DefaultView;

DataGrid1.DataSource = dv;

DataGrid1.DataBind();


}

if (!IsPostBack)

{

StartIndex = 0;//StartIndex是int类型的公用变量

SqlConnection MyConnection = new SqlConnection(YourOwnConnectionString);

SqlCommand MyCommand = new SqlCommand( "SELECT mycount = COUNT(*) FROM Table ",MyConnection);

MyConnection.Open();

SqlDataReader dr = MyCommand.ExecuteReader(CommandBehavior.SingleRow);

if (dr.Read())

DataGrid1.VirtualItemCount = (int)dr[ "mycount "];

dr.Close();

MyConnection.Close();

SetGridSource(StartIndex, "上一页 ");//看看现在的形参有什么不同哦

}

private void SetGridSource (int StartPosition, string GoToPage)
{
SqlConnection MyConnection = new SqlConnection(YourOwnConnectionString);
SqlCommand MyCommand = null;
switch (GoToPage)
{
case "上一页 ":
MyCommand = new
SqlCommand( "SELECT TOP 5 * FROM Table WHERE column1 > = @ID ORDER BY column1 ",MyConnection);
if (StartPosition == 0)
MyCommand.Parameters.Add( "@ID ",SqlDbType.NVarChar, 10).Value = " ";//这里参数10是ID字段的长度
else
MyCommand.Parameters.Add( "@ID ",SqlDbType.NVarChar,10).Value =
ViewState[(DataGrid1.CurrentPageIndex + 1).ToString()];

break;
case "下一页 ":
MyCommand = new
SqlCommand( "SELECT TOP 5 * FROM Table WHERE column1 > @ID ORDER BY column1 ",MyConnection);
//注意:这里用的是> ,不是> =哟
MyCommand.Parameters.Add( "@ID ", SqlDbType.NVarChar,10).Value = DataGrid1.Items[4].Cells[0].Text;
//Items[4]表示第5行即每页显示的最后一行
break;
}
MyConnection.Open();
SqlDataReader dr = MyCommand.ExecuteReader();
DataGrid1.DataSource = dr;
DataGrid1.DataBind();
dr.Close();
MyConnection.Close();

//用ViewState来缓存刚才访问过的那一页的第一行中的主键值
ViewState[(DataGrid1.CurrentPageIndex + 1).ToString()]=DataGrid1.Items[0].Cells[0].Text;
}
注:如果是oracle数据库,可以在where条件中用rownum来控制上下页的条数与内容。

请在按扭的click事件里的最后调用SetGridSource方法,参数

StartPosition= DataGrid1.CurrentPageIndex *DataGrid1.PageSize;

[参考]关于Datagrid分页的更详细的内容,可以参看华中科技大学出版社出版的章立民先生所著之《用实例学ASP.NET--使用VB.NET与ADO.NET》一书


[解决办法]
问题应该出在绑定搜索之后没有绑定在分页里面!所以你按分页,他又默认绑定整个数据库了!

读书人网 >asp.net

热点推荐