C# 如果下拉列表项在gridview中没有匹配的记录,如何显示错误消息?
在aspx页面中,我有:2个下拉列表,包括数据绑定和外部gridview,一个搜索按钮和gridview 1。我在sql中使用存储过程。一个下拉菜单是MainMenu,另一个是category。如果我从MainMenu中选择一个项目,category下拉菜单将加载相应的类别。单击搜索按钮时,Gridview1将显示与这些选择匹配的行。我的问题是:如果没有与下拉选择匹配的行,则应显示错误消息,但该消息不显示。我尝试了几种方法,但均无效。但是没有错误。请帮我翻译代码 存储过程:C# 如果下拉列表项在gridview中没有匹配的记录,如何显示错误消息?,c#,asp.net,stored-procedures,gridview,C#,Asp.net,Stored Procedures,Gridview,在aspx页面中,我有:2个下拉列表,包括数据绑定和外部gridview,一个搜索按钮和gridview 1。我在sql中使用存储过程。一个下拉菜单是MainMenu,另一个是category。如果我从MainMenu中选择一个项目,category下拉菜单将加载相应的类别。单击搜索按钮时,Gridview1将显示与这些选择匹配的行。我的问题是:如果没有与下拉选择匹配的行,则应显示错误消息,但该消息不显示。我尝试了几种方法,但均无效。但是没有错误。请帮我翻译代码 存储过程: ALTER PR
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页面将项目添加到两个下拉列表中,所以下拉列表是数据绑定的。现在,当我选择汽车,第二个下拉列表将加载宝马,洪都拉斯市。假设我单击BMW,搜索按钮->gridview将显示以下内容:
MainCategory Category Colour
Car BMW Black
现在,如果选择“自行车”并单击“搜索”按钮,Gridview将保持不变。它应该显示未找到匹配项,因为没有为bike添加子类别,因此没有记录。我的问题是,当点击搜索按钮时,下拉项Bike应该与gridview中的任意一行Bike匹配。如何检查这个?我同意如果我在gridview中部署下拉菜单会更容易,但因为第二个下拉菜单依赖于第一个下拉菜单,所以我并没有选择它来避免复杂性。这就是我的问题。它不能按预期工作的原因之一是,您的代码中有SELECT1和SELECT2查询名称,这是您正在使用的仅有的两种情况。而在您的过程中,您在SELECT1和SELECT2上使用IF…ELSE,并且仅当它不是SELECT1或SELECT2中的任何一个时才返回@Error=0。这意味着从逻辑上讲,除非您传递除SELECT1或SELECT2之外的其他内容,否则您永远不会将0作为输出。我希望这是清楚的 此外,您可以在过程中放入TRY和CATCH,以确保过程中没有收到返回错误值的异常。这也是一个很好的编码实践 当查询没有返回行时,可以在那里设置@Error=0,并返回0作为输出
希望这有帮助。调试代码并检查retVal变量的值。由于您正在将它与0相等,即使它不是0,它仍然不会显示该消息。但是,先生,如果存在,则在外部显示。在结束时,如果不存在,则执行ELSE循环set ERROR=0..sir仍然不知道如何修改代码/存储过程。如果你能写出正确的代码那就太好了。谢谢。当你的查询中没有行时,你只想显示0,对吗?我已经编辑了这个问题。请在最后检查。它不是行。计数=0设置错误=0。我的问题是:如果在gridview中找不到匹配项,则显示找不到匹配数据只是为了消除我的混淆,当没有行时,您是否正在从您的过程中获取retVal=0?我不希望这样,先生..通过检查条件不容易做到..如果ds.rows.count