【发布时间】:2015-04-27 05:01:03
【问题描述】:
在 aspx 页面中,我有:2 个下拉列表(数据绑定和外部 gridview),一个搜索按钮和 GridView1。我在 sql 中使用存储过程。一个下拉菜单是 MainMenu,另一个是类别。如果我从 MainMenu 中选择一个项目,类别下拉菜单将加载相应的类别。当我单击搜索按钮时,Gridview1 将显示与这些选择匹配的行。我的问题:如果没有与下拉选择匹配的行,则应显示错误消息,但未显示。我尝试了多种方法,但徒劳无功。但是没有错误。请帮助提供代码。
存储过程:
ALTER PROCEDURE [dbo].[SearchStentRecords_Sp]
@Action VARCHAR(10)
,@ddl1 VARCHAR(50)
,@ddl2 VARCHAR(50)
, @ERROR int OUTPUT
AS
BEGIN
IF EXISTS(SELECT * FROM Addstock where Addstock.Device=@ddl1)
BEGIN
set @ERROR=1
IF @Action = 'SELECT1'
BEGIN
SELECT * FROM Addstock where Addstock.Device=@ddl1 AND Addstock.Category=@ddl2 AND Used='N' AND TakenBack='N'
END
ELSE IF @Action = 'SELECT2'
BEGIN
SELECT * FROM Addstock where Addstock.Device=@ddl1 AND Used='N' AND TakenBack='N'
END
END
ELSE
BEGIN
SET @ERROR= 0
END
END
搜索按钮点击方法的代码:
protected void btnSearch_Click(object sender, EventArgs e)
{
string constr = WebConfigurationManager.ConnectionStrings["ConnectString"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
con.Open();
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter adp = new SqlDataAdapter();
try
{
if (ddlMainmenu.SelectedIndex != 0 && ddlStentCat.SelectedIndex != 0)
{
cmd = new SqlCommand("SearchStentRecords_Sp", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Action", "SELECT1");
cmd.Parameters.AddWithValue("@ddl1", ddlMainmenu.SelectedItem.Text);
cmd.Parameters.AddWithValue("@ddl2", ddlStentCat.SelectedItem.Text);
SqlParameter resultParam= new SqlParameter("@ERROR", System.Data.SqlDbType.Int);
resultParam.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(resultParam);
cmd.ExecuteNonQuery();
int retVal;
int.TryParse(resultParam.Value.ToString(),out retVal);
if (retVal == 1)
{
adp.SelectCommand = cmd;
adp.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
else if(retVal==0)
{
GridView1.Visible=false;
lblErrormsg.Text = "No Records Found";
}
}
else if (ddlMainmenu.SelectedIndex != 0 && ddlStentCat.SelectedIndex == 0)
{
cmd = new SqlCommand("SearchStentRecords_Sp", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Action", "SELECT2");
cmd.Parameters.AddWithValue("@ddl1", ddlMainmenu.SelectedItem.Text);
SqlParameter resultParam= new SqlParameter("@ERROR", System.Data.SqlDbType.Int);
resultParam.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(resultParam);
cmd.ExecuteNonQuery();
int retVal;
//= (int)cmd.Parameters["@ERROR"].Value;
int.TryParse(resultParam.Value.ToString(),out retVal);
if (retVal==1)
{
adp.SelectCommand = cmd;
adp.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
else if(retVal==0)
{
lblErrormsg.Text = "No Records Found";
}
}
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "Message", "alert('Error occured : " + ex.Message.ToString() + "');", true);
}
finally
{
con.Close();
}
}
}
例如。假设 dropdown1 有项目:汽车、自行车。并且汽车有子类别:宝马,本田城市。自行车没有子类别。因为我通过其他 aspx 页面将项目添加到两个下拉列表中,因此下拉列表是数据绑定的。现在,当我选择 Car 时,第二个下拉列表将加载 BMW,Hond City。假设我点击 BMW 并搜索按钮--> gridview 将显示以下内容:
MainCategory Category Colour
Car BMW Black
现在如果选择 Bike 并单击搜索按钮 Gridview 保持不变。它应该显示 NO Match found 因为没有为自行车添加子类别,因此没有记录。我的问题是单击搜索按钮时,下拉项 Bike 应该与 gridview 中的任何行匹配 Bike。如何检查这个?我同意如果我在 gridview 中部署下拉菜单会更容易,但由于第二个下拉菜单依赖于第一个下拉菜单,我没有去避免复杂化。这是我的问题。
【问题讨论】:
-
调试您的代码并检查
retVal变量的值。由于您将其与 0 相等,因此即使它不是 0,它仍然不会显示该消息。
标签: c# asp.net stored-procedures gridview