【问题标题】:how to display error message if dropdown list item doesnt have matching records in gridview?如果下拉列表项在gridview中没有匹配的记录,如何显示错误消息?
【发布时间】: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


【解决方案1】:

这里它没有按预期工作的原因之一是您的代码隐藏中有SELECT1SELECT2 查询名称,这是您使用的仅有的两种情况。而在您的过程中,您在SELECT1SELECT2 上使用IF...ELSE,并且仅当它不是SELECT1SELECT2 之一时才返回@Error=0。这意味着从逻辑上讲,除非您传递 SELECT1SELECT2 以外的其他内容,否则您永远不会得到 0 作为输出。我希望这很清楚。

此外,您可以将TRYCATCH 放入您的过程中,以确保您的过程中不会收到返回错误值的异常。这也是一种很好的编码习惯。

当您的查询没有返回任何行时,您可以在那里设置@Error=0 并返回 0 作为输出。

希望这会有所帮助。

【讨论】:

  • 但是先生在外面,如果还有如果存在的话。最后 ELSE 循环执行 IF NOT exists set ERROR=0..sir 仍然困惑如何修改代码/存储过程。如果写正确的代码,那就太好了..thanku
  • 所以你只想在查询中没有行时显示 0,对吧?
  • 我已经编辑了问题。请检查最后。它不是 rows.count=0 设置错误=0。我的问题是:如果在 gridview 中找不到匹配项,则显示 No Matching Data found
  • 只是为了消除我的困惑,当没有行时,您现在是否从您的程序中获得retVal=0
  • 我不希望先生..通过检查条件..如果(ds.rows.count
猜你喜欢
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多