当我按条件搜索的时候,比如我选择了计算机行业搜索,有2页,点击下一页的时候提示if (hangye.ToString() == "" && pro.ToString() == "" && city.ToString() == "" && key.ToString() == "")未将对象引用到对象的实例
下面是按条件搜索和分页的代码,点击下一页的时候又执行了result()里面的代码,如何保持上一页的查询状态?在线等private void result()
    {
        if (hangye.ToString() == "" && pro.ToString() == "" && city.ToString() == "" && key.ToString() == "")
        {
            Response.Write("<script>alert('请选择搜索条件!');history.go(-1);</script>");
        }
        else
        {
            string sql = "";
            PagedDataSource ps = new PagedDataSource();
            SqlConnection con = new SqlConnection(conn);
            con.Open();
            //按行业搜索
            if (hangye.ToString() != "")
            {
                sql = "select * from com_info where hangye='" + hangye + "' order by updatetime desc";
            }
            //按行业和地区搜索
            if (hangye.ToString() != "" && city.ToString() != "")
            {
                sql = "select * from com_info where hangye='" + hangye + "' and city='" + city + "' order by updatetime desc";
            }
            //按地区搜索
            if (city.ToString() != "")
            {
                sql = "select * from com_info where city='" + city + "' order by updatetime desc";
            }
            //按关键字搜索
            if (key.ToString() != "")
            {
                sql = "select * from com_info where com_name like '%" + key + "%' order by updatetime desc";
            }
            if (hangye.ToString()!="" && city.ToString()!="" && key.ToString() != "")
            {
                sql = "select * from com_info where hangye='"+hangye+"' and city='"+city+"' and com_name like '&"+key+"&' order by updatetime desc";
            }
            SqlDataAdapter sda = new SqlDataAdapter(sql, con);
            DataSet ds = new DataSet();
            sda.Fill(ds,"com_info");
            ps.DataSource = ds.Tables["com_info"].DefaultView;
            ps.AllowPaging = true;
            ps.PageSize = 10;
            ps.CurrentPageIndex = Convert.ToInt32(ViewState["cur"]);
            lblpageindex.Text = Convert.ToString(ps.CurrentPageIndex + 1);
            lblpagecount.Text = ps.PageCount.ToString();
            lkbtnfirst.Enabled = true;
            lkbtnup.Enabled = true;
            lkbtnnext.Enabled = true;
            lkbtnlast.Enabled = true;
            if (ps.IsFirstPage)
            {
                lkbtnfirst.Enabled = false;
                lkbtnup.Enabled = false;
            }
            if (ps.IsLastPage)
            {
                lkbtnnext.Enabled = false;
                lkbtnlast.Enabled = false;
            }
            dl_result.DataSource = ps;
            dl_result.DataBind();
            con.Close();
        }
    }
    protected void lkbfirst_Click(object sender, EventArgs e)
    {
        ViewState["cur"] = 0;
        result();
    }
    protected void lkbup_Click(object sender, EventArgs e)
    {
        ViewState["cur"] = Convert.ToInt32(ViewState["cur"]) - 1;
        result();
    }
    protected void lkbnext_Click(object sender, EventArgs e)
    {
        ViewState["cur"] = Convert.ToInt32(ViewState["cur"]) + 1;
        result();
    }
    protected void lkblast_Click(object sender, EventArgs e)
    {
        ViewState["cur"] = Convert.ToString(Convert.ToInt32(lblpagecount.Text) - 1);
        result();
    }

解决方案 »

  1.   

    是不是有空值或未找到hangye,pro,city,key的值跟断点试试
      

  2.   

    对于以下这段代码来说
    if (hangye.ToString() == "" && pro.ToString() == "" && city.ToString() == "" && key.ToString() == "")
    除了可能等于""外,还有一种可能是等于null,
    当页面回传时肯定会在次执行result()
    之所以又回到第一页,是因为在次执行了result()里的dl_result.DataBind();,
    也就是从新绑定了一次,当然又会显示第一页,
    可以考虑使用IsPostBack()判断是否为第一次请求,
    该怎么处理自己想吧.
      

  3.   

    判断字符串为空或null可以用string.IsNullOrEmpty(s),而且如果采用postback的方式分页可以把那些字段的值放在ViewState里面。