我有一个Web表单,用户使用jQuery DatePicker提交日期范围。 然后将DatePicker连接到数据库并检索信息并显示DataGridView
protected void DataGrid1(string FirstDate, string SecondDate)
{
DateTime fFirstDate;
DateTime sSecondDate;
DataTable dt = new Datatable();
DataTable dt2 = new DataTable();
//Check Valid Date Format
if (DateTime.TryParse(FirstDate, out fFirstDate) && DateTime.TryParse(SecondDate, out sSecondDate))
{
SqlConnection con = new SqlConnection(GetConnectionString());
try
{
con.Open();
string sqlStatement = "SELECT * @DateFrom and @DateTo"
SqlCommand cmd = new SqlCommand(SqlStatement, con);
cmd.Parameters.AddWithValue("@DateFrom", fFirstDate)
cmd.Parameters.AddWithValue("@DateTo", sSecondDate)
sqlDataAdapter sql_adapter = new SqlDataAdapter(cmd);
sql_adapter.Fill(dt);
if (dt.Rows.Count > 0)
{
GridView1.DataSource = dt;
GridView1.DataBind();
}
else
{}
catch (System.Data.SqlClient.SqlException ex)
{
string msg = "Error"
msg += ex.Message;
throw new Exception(msg);
}
finally
{
con.Close();
}
//Repeat Try for DataTable2 creating new data source
}
}
上面我有我的代码,数据库从用户提交的日期范围中检索信息。下面是按钮点击代码。
protected void Button1_Click(object sender, EventArgs e)
{
BindDataGrid1(TextFirstDate.Text, TextSecondDate.Text);
}
当用户输入日期时,DataGridView将显示在同一页面上。有没有办法在提交后在新的webform上显示datagridview?
我尝试将重定向添加到新页面的按钮,并在新页面上为datagridview建立html代码,但我似乎无法正确使用它,因为它是一个新表单。
答案 0 :(得分:0)
我只需在其上创建包含DataGrid的另一个页面,并在按钮单击时将日期参数作为查询字符串传递给它。
像这样:
使用Button和datepicker的页面:
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect(string.Format("MyDataGridPage.aspx?firstDate={0}&secondDate={1}", TextFirstDate.Text, TextSecondDate.Text));
}
DataGrid页面:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
var firstDate = Request.QueryString["firstDate"] ?? DateTime.Now;
var secondDate = Request.QueryString["secondDate"] ?? DateTime.Now.AddDays(1);
BindDataGrid1(firstDate, secondDate);
}
}
答案 1 :(得分:0)
您应该使用跨页帖子。 在按钮中添加回发网址就像这样
在发布的页面中,您可以在pageload事件中获取日期输入的值 protected void Page_Load(object sender,EventArgs e) { TextBox txtstartdate; TextBox txtEnddate;
//getting controls from previous page
txtstartdate= (TextBox)PreviousPage.FindControl("textboxID1");
txtEnddate= (TextBox)PreviousPage.FindControl("textboxID2");
BindDataGrid1(txtstartdate.Text , txtEnddate.Text);
}
答案 2 :(得分:0)
我对您的代码进行了一些更改。使用DataGrid1(string FirstDate, string SecondDate)
,您需要返回DataTable
作为结果并将此结果存储到session
。例如
protected DataTable DataGrid1(string FirstDate, string SecondDate)
{
DateTime fFirstDate;
DateTime sSecondDate;
DataTable dt = new Datatable();
DataTable dt2 = new DataTable();
//Check Valid Date Format
if (DateTime.TryParse(FirstDate, out fFirstDate) && DateTime.TryParse(SecondDate, out sSecondDate))
{
SqlConnection con = new SqlConnection(GetConnectionString());
try
{
con.Open();
string sqlStatement = "SELECT * @DateFrom and @DateTo"
SqlCommand cmd = new SqlCommand(SqlStatement, con);
cmd.Parameters.AddWithValue("@DateFrom", fFirstDate)
cmd.Parameters.AddWithValue("@DateTo", sSecondDate)
sqlDataAdapter sql_adapter = new SqlDataAdapter(cmd);
sql_adapter.Fill(dt);
return dt;
catch (System.Data.SqlClient.SqlException ex)
{
string msg = "Error"
msg += ex.Message;
throw new Exception(msg);
}
finally
{
con.Close();
}
}
}
在Button Click事件中调用此函数并将其值存储到Session
例如
protected void Button1_Click(object sender, EventArgs e)
{ Session.Add("MyGridData",BindDataGrid1(TextFirstDate.Text,TextSecondDate.Text));
Response.Redirect("Webform2.aspx");
}
现在将您的网格放入Webform2.aspx并将以下代码写入
背后的代码中protected void Page_Load(object sender, EventArgs e)
{
DataTable dt= (DataTable)Session["MyGridData"];
if (dt.Rows.Count > 0)
{
GridView1.DataSource = dt;
GridView1.DataBind();
}
}