页面类里面,我写了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方法啊,每个存储过程的参数个数都是不一样的啊。

解决方案 »

  1.   

    按钮的点击事件里面 将数据库中数据绑定gridview 这个时候应该就用到了分页了吧  然后分页的事件里面只要传过来当前页的索引INDEX就应该可以了啊
      

  2.   

    public Boolean ExecProcNotice(string title, string content, string person)
        {
            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;
            }
        }
      

  3.   

    gridview又是1个新概念啊,
    不知道怎么用啊,
    再去找找资料看,脑子晕了,
      

  4.   

    2楼,你这个是调用存储过程,这个我写好了。
    分页页面点击事件时,的数据源,怎么给,
    难道还是同你的代码一样从con.Open();
    开始写吗?
      

  5.   

        
    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();
        }
      

  6.   

    public void Bind()
    {
         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();
        }
      

  7.   

     protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            GridView1.DataBind();
        }
    可是这样写,在我这里不行啊,会变空白,网上说中间还要加1个
    GridView1.DataSource =  ***;  //这里是写我的数据源 
    ------------
    就是这个数据源怎么写,。。
      

  8.   

    倒,不是贴出来了吗。
    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(); 
        }
      

  9.   

    本帖最后由 amandag 于 2010-01-20 15:33:06 编辑
      

  10.   

    那好吧,我知道了,就是把很多写到1个方法Bind(); 里面去。
    那我也这样子搞,谢谢了。
      

  11.   

    using System; 
    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:  手敲代码,有误勿怪!
      

  12.   

    多谢楼上啊,都结贴了,ViewState好好看下。另外我想说1下,其实我也想分层,业务数据层分开,感觉这样编程很有意思啊。
    但是存储过程的话,数据层和业务层是怎么样的1个思路。因为参数个数不一样啊。
    不像select,给数据层select字符串进去,1个表就出来。