页面类里面,我写了1个按钮单击事件,从数据库取数据放进GridView里面。
但在写分页事件时
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource = ***; //这里是写我的数据源
GridView1.DataBind();
}
就是这个数据源应该怎么写呢,人如果直接写ds.Tables["rplist"];就报错,说未定义的变量ds
-------------------------
难道要从数据库连接到存储过程的参数再到DataSet的形成都要写吗?
我现在就是这么做了,分页是能出来了,可是很难受啊,科学的方法应该不是这样的吧,
我是初学者,1个人在琢磨,都要晕死了。
-------------------------
//我也想按照网上的方法写1个GetData方法,我给GetData方法1个select字符串,return1个表。
但是我取数据是用存储过程的,存储过程的参数怎么传给GetData方法啊,每个存储过程的参数个数都是不一样的啊。
但在写分页事件时
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource = ***; //这里是写我的数据源
GridView1.DataBind();
}
就是这个数据源应该怎么写呢,人如果直接写ds.Tables["rplist"];就报错,说未定义的变量ds
-------------------------
难道要从数据库连接到存储过程的参数再到DataSet的形成都要写吗?
我现在就是这么做了,分页是能出来了,可是很难受啊,科学的方法应该不是这样的吧,
我是初学者,1个人在琢磨,都要晕死了。
-------------------------
//我也想按照网上的方法写1个GetData方法,我给GetData方法1个select字符串,return1个表。
但是我取数据是用存储过程的,存储过程的参数怎么传给GetData方法啊,每个存储过程的参数个数都是不一样的啊。
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);
con.Open();
SqlCommand cmd = new SqlCommand("insert_tb_notice", con);
cmd.CommandType = CommandType.StoredProcedure;调用存储过程
SqlParameter pTitle = new SqlParameter("@noticeTitle", SqlDbType.VarChar, 40);
pTitle.Value = title;
cmd.Parameters.Add(pTitle);
//公告内容
SqlParameter pContent = new SqlParameter("@noticeContent", SqlDbType.Text, 0); //0为Text默认存储的最大值
pContent.Value = content;
cmd.Parameters.Add(pContent);
//公告人
SqlParameter pPerson = new SqlParameter("@noticePerson", SqlDbType.VarChar, 20);
pPerson.Value=person;
cmd.Parameters.Add(pPerson);
//判断运行结果
if (cmd.ExecuteNonQuery() > 0)
{
con.Close();
return true;
}
else
{
con.Close();
return false;
}
}
不知道怎么用啊,
再去找找资料看,脑子晕了,
分页页面点击事件时,的数据源,怎么给,
难道还是同你的代码一样从con.Open();
开始写吗?
public System.Data.DataSet GetDataSet(string sQueryString, string TableName)
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);
SqlDataAdapter dbAdapter = new SqlDataAdapter(sQueryString, con);
DataSet dataset = new DataSet();
dbAdapter.Fill(dataset, TableName);
return dataset;
}
protected void Page_Load(object sender, EventArgs e)
{
GridView1.DataSource = bc.GetDataSet("select * from tb_department", "department");
GridView1.DataKeyNames = new String[] { "ID" };
GridView1.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
{
GridView1.DataSource = bc.GetDataSet("select * from tb_department", "department");
GridView1.DataKeyNames = new String[] { "ID" };
GridView1.DataBind();}
protected void Page_Load(object sender, EventArgs e)
{
Bind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
Bind();
}
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
可是这样写,在我这里不行啊,会变空白,网上说中间还要加1个
GridView1.DataSource = ***; //这里是写我的数据源
------------
就是这个数据源怎么写,。。
public void Bind()
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSetting["conStr"]);
SqlDataAdapter dbAdapter = new SqlDataAdapter("select * from tb_department",con);
DataSet dataset = new DataSet();
dbAdapter.Fill(dataset);
GridView1.DataSource=dataset;
GridView1.DataKeyNames = new String[] { "ID" };
GridView1.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
Bind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
Bind();
}
那我也这样子搞,谢谢了。
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text; namespace threporter
{
public partial class details : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//省去无关代码
}
public void LinkButton1_Click(object sender, EventArgs e)
{
this.Panel1.Visible = false;
this.Panel2.Visible = true;
BindDataView(true);
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindDataView(false);
}
private void BindDataView(bool isPostBack);
{
if(isPostBack)
{
ViewState["cpoid"] = DropDownList1.SelectedValue;
ViewState["cmaker"]= DropDownList3.SelectedValue;
ViewState["bedpodate"].Value = DateTime.Parse(TextBox1.Text);
ViewState["endpodate"].Value = DateTime.Parse(TextBox2.Text);
}
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=服务器名;Initial Catalog=数据库名;User ID=sa";
conn.Open();
SqlCommand cmd = new SqlCommand("ruanpowarming", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@cpoid", SqlDbType.NVarChar, 30);
cmd.Parameters.Add("@cmaker", SqlDbType.NVarChar, 20);
cmd.Parameters.Add("@bedpodate", SqlDbType.DateTime, 8);
cmd.Parameters.Add("@endpodate", SqlDbType.DateTime, 8);
cmd.Parameters["@cpoid"].Value = ViewState["cpoid"].ToString();
cmd.Parameters["@cmaker"].Value = ViewState["cmaker"].ToString();
cmd.Parameters["@bedpodate"].Value = ViewState["bedpodate"].ToString();
cmd.Parameters["@endpodate"].Value = ViewState["endpodate"].ToString();
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter("ruanpowarming", conn);
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "rplist");
if (ds.Tables["rplist"].Rows.Count != 0)
{
GridView1.Visible = true;
GridView1.DataSource = ds.Tables["rplist"];
GridView1.DataBind();
}
}
}
} 1.两个方法是不能相互之间调用内部过程的。如果有相似的地方提出来作为公共参数就是了。
还是就是注意上边第一次查询的时候把查询条件放到ViewState中。翻页使用记录下的参数。
2.如果做项目还是分层好点,不要直接在页面写数据的查询和业务逻辑。
3.数据库的链接一定要try catch 释放资源.ps: 手敲代码,有误勿怪!
但是存储过程的话,数据层和业务层是怎么样的1个思路。因为参数个数不一样啊。
不像select,给数据层select字符串进去,1个表就出来。