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();
    }            
}

ASP.NET foreach 循环仅显示网格视图的最后一个值

您的查询在循环内。在每个循环中,您执行查询并将网格与查询结果绑定,以替换上一个结果。
当然,您最终只会得到最后一个结果。

但是您不需要任何类型的循环,只需使用 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()