2014-10-17 111 views
0

我有一个ASP.net(www.mypage.com/search.aspx)网页,其中有一定的下拉列表(从后台代码填充)提交一个asp.net页面搜索,一个提交按钮和一个中继器控制:如何使用存储过程

<asp:Label runat="server" ID="lblCount"></asp:Label> 
<asp:DropDownList ClientIDMode="Static" ID="ddlProvider" CssClass="setProvDDStyle" runat="server" AppendDataBoundItems="true"></asp:DropDownList> 
<asp:DropDownList ClientIDMode="Static" ID="ddlSpecialty" CssClass="chosen-select setProvDDStyle" runat="server" AppendDataBoundItems="true"></asp:DropDownList> 
<asp:DropDownList ClientIDMode="Static" ID="ddlLocation" CssClass="chosen-select setProvDDStyle" runat="server" AppendDataBoundItems="true"></asp:DropDownList> 

<asp:Button ID="btnSubmit" runat="server" Text="Search" /> 

<~- was using the below button to handle the search 
<asp:LinkButton ID="lbSearch" ClientIDMode="Static" CssClass="defaultLinks" runat="server" OnClick="lbSearch_Click">Search</asp:LinkButton> --> 

<asp:Repeater runat="server" ID="rptSearchResult" ClientIDMode="Static"> 
    <HeaderTemplate> 
     <div style="padding-left: 5%; overflow: hidden; width: 95%;"> 
      <div style="float: left; width: 20%; overflow: hidden; text-align: center;"> 
       <img src="<%# Eval("Image").ToString() %>" /> 
      </div> 
      <div style="float: left; width: 78%; overflow: hidden; text-align: left; vertical-align: top;"> 
       <span><asp:Label ID="lblName" runat="server" ClientIDMode="Static"><%# Eval("Physician Name").ToString() %></asp:Label></span> 
       <hr /> 
       Specialty: <asp:Label id="lblSpec1" runat="server"><%# Eval("Specialty1").ToString() %></asp:Label>, 
      </div> 
     </div> 
    </HeaderTemplate> 
</asp:Repeater> 

下面的代码背后:

string cString; 
SqlConnection Conn; 
string sqlCode = ""; 
string strGender = ""; 
int rowCount = 0; 
string strProv, strSpec, strLoca, strGend, strInsu, strLang; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    cString = ""; //my connection string 
    if (!Page.IsPostBack) 
    { 
     PopulatePhysician(); 
     PopulateLocation(); 
     PopulateSpecialty(); 
     PopulateInsurance(); 
     PopulateLanguage(); 
    } 
} 
public void lbSearch_Click(object sender, EventArgs e) 
{ 
    Conn = new SqlConnection(cString); 
    Conn.Open(); 

    strGender = ddlGender.SelectedItem.Text; 

    if (ddlProvider.SelectedItem.Text == "Any Provider") 
    { 
     strProv = "%"; 
    } 
    else 
    { 
     strProv = ddlProvider.SelectedItem.Text; 
    } 
    if (ddlSpecialty.SelectedItem.Text == "Any Specialty") 
    { 
     strSpec = "%"; 
    } 
    else 
    { 
     strSpec = ddlSpecialty.SelectedItem.Text; 
    } 
    if (ddlLocation.SelectedItem.Text == "Any Location") 
    { 
     strLoca = "%"; 
    } 
    else 
    { 
     strLoca = ddlLocation.SelectedItem.Text; 
    } 
    if (ddlGender.SelectedItem.Text == "Any Gender") 
    { 
     strGend = "%"; 
    } 
    else 
    { 
     strGend = ddlGender.SelectedItem.Text; 
    } 
    if (ddlInsurance.SelectedItem.Text == "Any Insurance") 
    { 
     strInsu = "%"; 
    } 
    else 
    { 
     strInsu = ddlInsurance.SelectedItem.Text; 
    } 
    if (ddlLanguage.SelectedItem.Text == "Any Language") 
    { 
     strLang = "%"; 
    } 
    else 
    { 
     strLang = ddlLanguage.SelectedItem.Text; 
    } 

    using (SqlConnection scCon = new SqlConnection(cString)) 
    { 
     using (SqlCommand scCmd = new SqlCommand("searchPhysician", scCon)) 
     { 
      scCmd.CommandType = CommandType.StoredProcedure; 

      scCmd.Parameters.Add("@strProvider", SqlDbType.VarChar).Value = strProv; 
      scCmd.Parameters.Add("@strSpecialty", SqlDbType.VarChar).Value = strSpec; 
      scCmd.Parameters.Add("@strLocation", SqlDbType.VarChar).Value = strLoca; 
      scCmd.Parameters.Add("@strGender", SqlDbType.VarChar).Value = strGend; 
      scCmd.Parameters.Add("@strInsurance", SqlDbType.VarChar).Value = strInsu; 
      scCmd.Parameters.Add("@strLanguage", SqlDbType.VarChar).Value = strLang; 

      scCon.Open(); 
      scCmd.ExecuteNonQuery(); 

      //rptSearchResult datasource = result from the above store procedure query 
      //lblCount.Text = rptSearchResult.Items.Count 
     } 
    } 

我如何能实现,而不在页面提交其他按钮如下:

//rptSearchResult datasource = result from the above store procedure query 
    //lblCount.Text = rptSearchResult.Items.Count 

我还想网页的URL有查询字符串的结果已经显示出后:

例子:www.mypage.com/search.aspx?name=any provider&specialty=any specialty&location=any location

回答

1

我可以重定向任何一个谁在点击btnSearch当前页面上有一些查询字符串。然后在Page_Load你叫搜索函数读取查询字符串和绑定rptSearchResult。我希望你明白我的意思...

string cString; 
SqlConnection Conn; 
string sqlCode = ""; 
string strGender = ""; 
int rowCount = 0; 
string strProv, strSpec, strLoca, strGend, strInsu, strLang; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    cString = ""; //my connection string 
    if (!Page.IsPostBack) 
    { 
     PopulatePhysician(); 
     PopulateLocation(); 
     PopulateSpecialty(); 
     PopulateInsurance(); 
     PopulateLanguage(); 

     Search(); 
    } 
} 

public void lbSearch_Click(object sender, EventArgs e) 
{ 
    Response.Redirect(String.Format("~/search.aspx?name={0}&specialty={1}&location={2}", ddlProvider.SelectedItem.Text, ddlSpecialty.SelectedItem.Text, ddlLocation.SelectedItem.Text)); 
} 

public void Search() 
{ 
    Conn = new SqlConnection(cString); 
    Conn.Open(); 

    strGender = Request.QueryString["Gender"]; 

    if (Request.QueryString["Provider"] == "Any Provider") 
    { 
     strProv = "%"; 
    } 
    else 
    { 
     strProv = Request.QueryString["Provider"]; 
    } 
    if (Request.QueryString["Specialty"] == "Any Specialty") 
    { 
     strSpec = "%"; 
    } 
    else 
    { 
     strSpec = Request.QueryString["Specialty"]; 
    } 
    if (Request.QueryString["Location"] == "Any Location") 
    { 
     strLoca = "%"; 
    } 
    else 
    { 
     strLoca = Request.QueryString["Location"]; 
    } 
    if (Request.QueryString["Gender"] == "Any Gender") 
    { 
     strGend = "%"; 
    } 
    else 
    { 
     strGend = Request.QueryString["Gender"]; 
    } 
    if (Request.QueryString["Insurance"] == "Any Insurance") 
    { 
     strInsu = "%"; 
    } 
    else 
    { 
     strInsu = Request.QueryString["Insurance"]; 
    } 
    if (Request.QueryString["Language"] == "Any Language") 
    { 
     strLang = "%"; 
    } 
    else 
    { 
     strLang = Request.QueryString["Language"]; 
    } 

    using (SqlConnection scCon = new SqlConnection(cString)) 
    { 
     using (SqlCommand scCmd = new SqlCommand("searchPhysician", scCon)) 
     { 
      scCmd.CommandType = CommandType.StoredProcedure; 

      scCmd.Parameters.Add("@strProvider", SqlDbType.VarChar).Value = strProv; 
      scCmd.Parameters.Add("@strSpecialty", SqlDbType.VarChar).Value = strSpec; 
      scCmd.Parameters.Add("@strLocation", SqlDbType.VarChar).Value = strLoca; 
      scCmd.Parameters.Add("@strGender", SqlDbType.VarChar).Value = strGend; 
      scCmd.Parameters.Add("@strInsurance", SqlDbType.VarChar).Value = strInsu; 
      scCmd.Parameters.Add("@strLanguage", SqlDbType.VarChar).Value = strLang; 

      scCon.Open(); 
      scCmd.ExecuteNonQuery(); 

      //rptSearchResult datasource = result from the above store procedure query 
      //lblCount.Text = rptSearchResult.Items.Count 
     } 
    } 
} 
+0

谢谢。我会试试看。 – SearchForKnowledge 2014-10-17 17:11:54

+0

如果是第一次加载,我不想调用'Search()':/ – SearchForKnowledge 2014-10-17 17:15:37

+0

有一件事,URL改变了,但DropDownList将一切都恢复为我不想要的默认值。另外,我只想在页面中点击Search时调用SEARCH()。 – SearchForKnowledge 2014-10-17 17:30:51

0

你需要做2件事。

  1. OnClick处理程序为asp:Button这样。

<asp:Button ID="btnSubmit" runat="server" Text="Search" OnClick="btnSubmit_Click" />

  • 重命名public void lbSearch_Click(object sender, EventArgs e)protected void btnSubmit_Click(object sender, EventArgs e)
  • 早些时候lbSearch_Click事件被绑定到linkbutton,我暗示此重命名为建议的一个,所以在提交按钮点击时,那些正在执行linkbutton的代码块现在将执行Search按钮单击。