【问题标题】:When search for right name display once when search for first character in name displays 5 times?当搜索名称中的第一个字符显示5次时搜索正确的名称显示一次?
【发布时间】:2013-05-20 15:13:14
【问题描述】:

在数据库中搜索仅在带有链接按钮的 Gridivew 中显示名字和姓氏。

在第一张图片中(1)我只搜索名字,并显示名字和姓氏。 在第二个图像(2)中,我只搜索第一个字符并显示它,但我显示它 5 次,为什么?只想要一次?

这是我的代码

  private void GetEmployee()
    {
        var db = new knowitCVdbEntities();
        var employee = (from p in db.EMPLOYEES
                        where
                            p.firstname.Contains(TextBoxSearch.Text) ||
                            p.lastname.Contains(TextBoxSearch.Text) ||
                            p.position.Contains(TextBoxSearch.Text)
                        select p).ToList();

        foreach (var vEmp in employee)
        {
            if (vEmp != null)
            {
                HiddenFieldID.Value = vEmp.employee_id.ToString();

                        if (Session["DataTableSearch"] != null)
                        {
                            _dt = (DataTable)Session["DataTableSearch"];
                        }
                        else
                        {
                            _dt.Columns.Add("Firstname");
                            _dt.Columns.Add("employeeId");

                        }
                        //_dt.Rows.Clear();
                        DataRow dr = _dt.NewRow();
                        dr["Firstname"] = vEmp.firstname+" "+vEmp.lastname;
                         dr["employeeId"] = vEmp.employee_id;

                        _dt.Rows.Add(dr);
                        Session["DataTableSearch"] = _dt;
                        GridViewDisplayName.DataSource = _dt;
                        GridViewDisplayName.DataBind();
                    }
            }

    }

【问题讨论】:

  • 在显示新结果之前您是否清除了行?
  • 不,我应该在哪里清除它们?

标签: c# asp.net


【解决方案1】:

当您完成并运行它时, 它将保存旧的搜索,

所以你必须在一开始就调用 _dt.clear ,这样理论上每次你只会得到一个结果:)

编辑 - 事实上你的代码中确实有明确的内容,只是注释掉了,只是在错误的地方:)

【讨论】:

    【解决方案2】:

    foreach (var vEmp in employee) 行之前插入:

    _dt.Clear();
    

    所以你的代码是:

    private void GetEmployee()
    {
        var db = new knowitCVdbEntities();
        var employee = (from p in db.EMPLOYEES
                        where
                            p.firstname.Contains(TextBoxSearch.Text) ||
                            p.lastname.Contains(TextBoxSearch.Text) ||
                            p.position.Contains(TextBoxSearch.Text)
                        select p).ToList();
    
        _dt.Clear();
    
        foreach (var vEmp in employee)
        {
            if (vEmp != null)
            {
                HiddenFieldID.Value = vEmp.employee_id.ToString();
    
                        if (Session["DataTableSearch"] != null)
                        {
                            _dt = (DataTable)Session["DataTableSearch"];
                        }
                        else
                        {
                            _dt.Columns.Add("Firstname");
                            _dt.Columns.Add("employeeId");
    
                        }
                        //_dt.Rows.Clear();
                        DataRow dr = _dt.NewRow();
                        dr["Firstname"] = vEmp.firstname+" "+vEmp.lastname;
                         dr["employeeId"] = vEmp.employee_id;
    
                        _dt.Rows.Add(dr);
                        Session["DataTableSearch"] = _dt;
                        GridViewDisplayName.DataSource = _dt;
                        GridViewDisplayName.DataBind();
                    }
            }
    
    }
    

    【讨论】:

    • 我应该不使用 _dt.Rows.Clear(); ?
    • 由于您使用的是_dt.Rows.Add(),因此您正在向DataTable 添加新行。调用_dt.Clear() 将在您添加新的之前删除您的DataRow。你试过我的解决方案了吗?
    • 不是,如果我写 Anders 它什么都不会显示,但如果我只写 A ,它会显示 S ?
    • 因此,如果您只键入“A”,则会显示“Anders”。但是如果你输入“Anders”,它什么都不会显示?
    • 当我不使用 _Dt.Clear(); 进行搜索时,一切正常唯一不好的是,当我搜索一个字符时会显示多个
    猜你喜欢
    • 2014-04-21
    • 2016-02-07
    • 2020-03-30
    • 2015-01-05
    • 2015-11-04
    • 1970-01-01
    • 2021-10-06
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多