C# 当搜索右名称显示一次时,当搜索名称中的第一个字符显示5次时?
数据库中的搜索在Gridivew中仅显示firstname和lastname,并使用linkbutton 在第一个图像(1)中,我只搜索名字,并显示名字和姓氏。 在第二个图像(2)中,我只搜索中的第一个字符,它显示了它,但我显示了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.
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()进行搜索时,所有内容都可以正常工作;唯一糟糕的是,当我搜索一个字符时,会显示多个字符