使用搜索框填充gridview

时间:2012-10-19 06:54:07

标签: c# asp.net stored-procedures sql-server-2012

好的,我们所有人都在某个时刻完成了购买汽车或房屋的窗户!我想在那里使用的界面我想创建! 3个下拉列表或文本框,用户可以在其中插入将用于过滤搜索的信息

enter image description here

现在的问题是,我在网上搜索并找到了一些帮助/代码,但不知何故它完全不起作用。因为我需要的是,当页面加载时,所有数据都应该显示在gridview(或任何其他视图)中,然后当用户选择/输入他/她的信息并单击搜索时,视图必须根据有搜索

我尝试使用与注册学生相同的代码

protected void btnSearch_Click(object sender, EventArgs e)
{
    string strcon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\VC_temps.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
    SqlConnection con = new SqlConnection(strcon);

    SqlCommand com = new SqlCommand("Search_student", con);
    com.CommandType = CommandType.StoredProcedure;
    SqlParameter p1 = new SqlParameter("Course", DropDownList1.SelectedValue);
    SqlParameter p2 = new SqlParameter("Availability", DropDownList2.SelectedValue);
    SqlParameter p3 = new SqlParameter("JobSkill", DropDownList3.SelectedValue);
    com.Parameters.Add(p1);
    com.Parameters.Add(p2);
    com.Parameters.Add(p3);
    con.Open();
    SqlDataReader rd = com.ExecuteReader();
    if (rd.HasRows)
    {
           GridView1.DataSource = rd;
        GridView1.DataBind();
    }
}

使用以下存储过程

ALTER PROCEDURE Search_student
(
@Course         varchar(30),
@Availability   varchar(50),
@JobSkill       varchar(50)
)
AS
SELECT * FROM Student
WHERE Course = @Course OR Availability = @Availability OR JobSkill=@JobSkill

有人可以帮我找到合适的代码/解决方案,让它做到我想要的吗?我认为这将有助于很多未来的程序员,因为我找不到任何符合我想要的东西......也许我不知道在哪里看,但我意识到有很多变量涉及到搜索类似的东西此

2 个答案:

答案 0 :(得分:0)

更改存储过程如下,这可以解决您的问题...当您使用多个参数进行搜索时,请始终使用以下方式编写搜索查询...

ALTER PROCEDURE Search_student 
(
 @Course         varchar(30),
 @Availability   varchar(50),
 @JobSkill       varchar(50)
 )
AS
Begin
    SELECT * FROM Student 
    WHERE  Course =isnull(@Course,Course) 
    and Availability =isnull(@Availability,Availability)
    and JobSkill=isnull(@JobSkill,JobSkill)    
End

答案 1 :(得分:0)

而不是

   if (rd.HasRows)
    {
          rd.Read();
          GridView1.DataBind();
    }

请使用

   if (rd.HasRows)
   {
         GridView1.DataSource=rd;
         GridView1.DataBind();
   }