C# 当搜索右名称显示一次时,当搜索名称中的第一个字符显示5次时?

C# 当搜索右名称显示一次时,当搜索名称中的第一个字符显示5次时?,c#,asp.net,C#,Asp.net,数据库中的搜索在Gridivew中仅显示firstname和lastname,并使用linkbutton 在第一个图像(1)中,我只搜索名字,并显示名字和姓氏。 在第二个图像(2)中,我只搜索中的第一个字符,它显示了它,但我显示了5次为什么?只想要一次 这是我的密码 private void GetEmployee() { var db = new knowitCVdbEntities(); var employee = (from p in db.

数据库中的搜索在Gridivew中仅显示firstname和lastname,并使用linkbutton

在第一个图像(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();
                    }
            }

    }

当你经历这一切并运行它时, 它将保存旧的搜索结果

因此,您必须在一开始就调用_dt.clear,以便在理论上,您周围的每次都只有一个结果:)


编辑-事实上,您的代码中实际上有明文,只是注释掉了,只是在错误的位置:)

在您的
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()?由于您使用的是
\u dt.Rows.Add()
,因此您正在将新行添加到
数据表中。调用
\u dt.Clear()
将在添加新数据行之前删除数据行。你试过我的解决方案了吗?如果我写Anders,它不会显示任何东西,但是如果我只写A,它会显示?所以如果你只键入“A”,它会显示“Anders”。但是如果您键入“Anders”,它不会显示任何内容?当我不使用_Dt.Clear()进行搜索时,所有内容都可以正常工作;唯一糟糕的是,当我搜索一个字符时,会显示多个字符