ASP.NET foreach 循环仅显示网格视图的最后一个值
本文关键字:视图 最后一个 网格 显示 NET foreach 循环 ASP | 更新日期: 2023-09-27 18:37:23
我正在尝试使用 Gridview 选择具有 ID 的特定人员 ASP.NET 但只有最后一个用户 ID 读取。假设我的 ID 为 3、4 和 6,并且只有 ID 号 6 未显示在 Gridview 表中,但会显示 3 和 4。他们甚至不应该出现 3 和 4,因为我正在运行 sql 脚本: WHERE NOT EmployeeId = " + userID
.
foreach (int userID in userIDList)
{
string cs = ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString;
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("SELECT FirstName, LastName FROM Employee WHERE NOT EmployeeId = " + userID, con);
con.Open();
GridView4.DataSource = cmd.ExecuteReader();
GridView4.DataBind();
}
}
您的查询在循环内。在每个循环中,您执行查询并将网格与查询结果绑定,以替换上一个结果。
当然,您最终只会得到最后一个结果。
但是您不需要任何类型的循环,只需使用 IN 子句即可,该子句允许您指定值列表来过滤结果。
将代码更改为
string cs = ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString;
using (SqlConnection con = new SqlConnection(cs))
{
string inClause = string.Join(",", userIDList);
SqlCommand cmd = new SqlCommand(@"SELECT FirstName, LastName
FROM Employee WHERE EmployeeId NOT IN(" + inClause + ")", con);
con.Open();
GridView4.DataSource = cmd.ExecuteReader();
GridView4.DataBind();
}
编辑
似乎您在string.Join
调用中出现了某种莫名其妙的错误。不清楚是什么原因造成的,因为据我所知,您应该能够将List<int>
作为第二个参数传递给string.Join
。但是,您可以使用此代码强制整数列表成为字符串数组
string inClause = string.Join(",", userIDList
.Select(x => x.ToString())
.ToArray()