Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果下拉列表项在gridview中没有匹配的记录,如何显示错误消息?_C#_Asp.net_Stored Procedures_Gridview - Fatal编程技术网

C# 如果下拉列表项在gridview中没有匹配的记录,如何显示错误消息?

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

在aspx页面中,我有:2个下拉列表,包括数据绑定和外部gridview,一个搜索按钮和gridview 1。我在sql中使用存储过程。一个下拉菜单是MainMenu,另一个是category。如果我从MainMenu中选择一个项目,category下拉菜单将加载相应的类别。单击搜索按钮时,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页面将项目添加到两个下拉列表中,所以下拉列表是数据绑定的。现在,当我选择汽车,第二个下拉列表将加载宝马,洪都拉斯市。假设我单击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