更改ASP.NET页面sql查询中的参数-使用按钮单击事件,在每次按钮单击中进行sql查询
我有一个ASP.NET页面,详细信息如下更改ASP.NET页面sql查询中的参数-使用按钮单击事件,在每次按钮单击中进行sql查询,asp.net,sql,iterator,logic,code-behind,Asp.net,Sql,Iterator,Logic,Code Behind,我有一个ASP.NET页面,详细信息如下 Date OfficerID DutyID 25-NOV-13 2 666 26-NOV-13 2 666 27-NOV-13 2 666 28-NOV-13 2 666 29-NOV-13 2 666 30-NOV-13 2 666 01-DEC-13 2 666
Date OfficerID DutyID
25-NOV-13 2 666
26-NOV-13 2 666
27-NOV-13 2 666
28-NOV-13 2 666
29-NOV-13 2 666
30-NOV-13 2 666
01-DEC-13 2 666
02-DEC-13 2 523
以上内容通过下面的代码段填充到gridview中
DataTable table = new DataTable();
string connectionString = GetConnectionString();
string sqlQuery = "select * from duty_rota where duty_date between sysdate and sysdate+18";
using (OracleConnection conn = new OracleConnection(connectionString))
{
try
{
conn.Open();
using (OracleCommand cmd = new OracleCommand(sqlQuery, conn))
{
using (OracleDataAdapter ODA = new OracleDataAdapter(cmd))
{
ODA.Fill(table);
}
}
}
catch (Exception ex)
{
Response.Write("Not Connected" + ex.ToString());
}
}
//DropDownList1.DataSource = table;
//DropDownList1.DataValueField = "";
GridView1.DataSource = table;
GridView1.DataBind();
现在我还有一个previous按钮,它应该输出相同的页面,但sql查询略有改变
select * from duty_rota where duty_date between sysdate-18 and sysdate;
每点击一次按钮,日期参数应减少18,也就是说,第一次点击前一个按钮,查询将被删除
sysdate-18 and sysdate
第二次点击
sysdate-36 and sysdate-18
第三次点击
sysdate-54 and sysdate-36
等等
请帮助我如何实现它,我试图用一个变量来实现它,该变量与之前的按钮单击事件关联,该事件将随着每次后续单击而改变。但我并不是真的能够做到这一点。有人能给我介绍一下吗。在按钮点击事件中,尝试以下操作:
DataTable table = new DataTable();
string connectionString = GetConnectionString();
if (Session["sysdate"] == null || string.IsNullOrEmpty(Session["sysdate"].ToString()))
Session["sysdate"] = "-18";
else
Session["sysdate"] = "+ " + (Convert.ToInt32(Session["sysdate"]) - 18).ToString();
string sysdate = Session["sysdate"].ToString();
string sqlQuery = "select * from duty_rota where duty_date between sysdate " + sysdate + " and sysdate+18 " + sysdate;
using (OracleConnection conn = new OracleConnection(connectionString))
{
try
{
conn.Open();
using (OracleCommand cmd = new OracleCommand(sqlQuery, conn))
{
using (OracleDataAdapter ODA = new OracleDataAdapter(cmd))
{
ODA.Fill(table);
}
}
}
catch (Exception ex)
{
Response.Write("Not Connected" + ex.ToString());
}
}
GridView1.DataSource = table;
GridView1.DataBind();
编写以下代码以处理上一个和下一个按钮单击事件的动态查询:
protected void PrevioseButton_Click(object sender, EventArgs e)
{
var sqlQuery = this.GenerateQuery(false);
this.BindGrid(sqlQuery);
}
protected void NextButton_Click(object sender, EventArgs e)
{
var sqlQuery = this.GenerateQuery(true);
this.BindGrid(sqlQuery);
}
private string GenerateQuery(bool isNext)
{
if (ViewState["fromDate"] == null && ViewState["toDate"] == null)
{
ViewState["fromDate"] = isNext ? "sysdate+18" : "sysdate-18";
ViewState["toDate"] = isNext ? "sysdate+36" : "sysdate";
}
else
{
var from = ViewState["fromDate"].ToString().Replace("sysdate", string.Empty);
var to = ViewState["toDate"].ToString().Replace("sysdate", string.Empty);
int fromDay = 0;
int toDay = 0;
if (from != string.Empty)
{
fromDay = Convert.ToInt32(from);
}
if (to != string.Empty)
{
toDay = Convert.ToInt32(to);
}
if (!isNext)
{
fromDay = fromDay - 18;
toDay = toDay - 18;
}
else
{
fromDay = fromDay + 18;
toDay = toDay + 18;
}
from = "sysdate";
to = "sysdate";
if (fromDay > 0)
{
from += "+" + fromDay;
}
else if (fromDay < 0)
{
from += fromDay.ToString();
}
if (toDay > 0)
{
to += "+" + toDay;
}
else if (toDay < 0)
{
to += toDay.ToString();
}
ViewState["fromDate"] = from;
ViewState["toDate"] = to;
}
var sqlQuery = "select * from duty_rota where duty_date between " + ViewState["fromDate"] + " and "
+ ViewState["toDate"];
return sqlQuery;
}
private void BindGrid(string sqlQuery)
{
DataTable table = new DataTable();
string connectionString = GetConnectionString();
using (OracleConnection conn = new OracleConnection(connectionString))
{
try
{
conn.Open();
using (OracleCommand cmd = new OracleCommand(sqlQuery, conn))
{
using (OracleDataAdapter ODA = new OracleDataAdapter(cmd))
{
ODA.Fill(table);
}
}
}
catch (Exception ex)
{
Response.Write("Not Connected" + ex.ToString());
}
}
GridView1.DataSource = table;
GridView1.DataBind();
}
protectedvoid PrevioseButton\u单击(对象发送方,事件参数e)
{
var sqlQuery=this.GenerateQuery(false);
这个.BindGrid(sqlQuery);
}
受保护的void NextButton_Click(对象发送方,事件参数e)
{
var sqlQuery=this.GenerateQuery(true);
这个.BindGrid(sqlQuery);
}
私有字符串生成器(bool isNext)
{
如果(ViewState[“fromDate”]==null&&ViewState[“toDate”]==null)
{
ViewState[“fromDate”]=isNext?“sysdate+18”:“sysdate-18”;
ViewState[“toDate”]=isNext?“sysdate+36”:“sysdate”;
}
其他的
{
var from=ViewState[“fromDate”].ToString().Replace(“sysdate”,string.Empty);
var to=ViewState[“toDate”].ToString().Replace(“sysdate”,string.Empty);
int fromDay=0;
int今天=0;
if(from!=string.Empty)
{
fromDay=转换为32(从);
}
if(to!=string.Empty)
{
今天=转换为32(到);
}
如果(!isNext)
{
fromDay=fromDay-18;
今天=今天-18;
}
其他的
{
fromDay=fromDay+18;
今天=今天+18;
}
from=“sysdate”;
to=“sysdate”;
如果(fromDay>0)
{
from+=“+”+fromDay;
}
否则如果(从第天起<0)
{
from+=fromDay.ToString();
}
如果(今天>0)
{
到今天的+=“+”+;
}
否则如果(今天<0)
{
to+=今天。ToString();
}
ViewState[“fromDate”]=从;
ViewState[“toDate”]=to;
}
var sqlQuery=“select*from duty_rota,其中duty_日期介于”+ViewState[“fromDate”]+“和”
+视图状态[“toDate”];
返回sqlQuery;
}
私有void BindGrid(字符串sqlQuery)
{
DataTable=新的DataTable();
string connectionString=GetConnectionString();
使用(OracleConnection conn=新的OracleConnection(connectionString))
{
尝试
{
conn.Open();
使用(OracleCommand cmd=new OracleCommand(sqlQuery,conn))
{
使用(OracleDataAdapter ODA=新的OracleDataAdapter(cmd))
{
ODA.填写(表格);
}
}
}
捕获(例外情况除外)
{
写入(“未连接”+例如ToString());
}
}
GridView1.DataSource=表格;
GridView1.DataBind();
}
我认为ObjectDataSource控件可以完美地为您提供解决方案……但后来我意识到您的页面大小会有所不同
在这种情况下,需要将分页与gridview解除关联。这意味着分页应该是分开的,并且需要在网格视图中显示的数据需要分开。他们可能有一种像主人和孩子的关系。这意味着您需要单独的db调用来获取“每个”
分页部件可以由gridview或数据列表视图呈现
但是,如果gridview上的页面大小始终不变,您需要阅读以下内容:它工作得非常好。使用视图状态的想法真是太棒了。只是一个简单的问题-你能帮我查询下一个按钮吗。我是这个Viewstate/Session的新手。我的意思是,查询将以sysdate递增,sysdate和sysdate+18之间的-DUTY\u DATE+18和sysdate.ok。我将在创建示例代码后更新我的答案。-谢谢,这将非常有帮助。我发现一个问题,当我单击“下一步”按钮时,首先填充SYSDATE和SYSDATE+18之间的日期,但理想情况下,它应该显示SYSDATE+18和SYSDATE+36之间的数据,您能帮助我如何解决它吗?