C# ASP.NET foreach循环仅显示gridview的最后一个值

C# ASP.NET foreach循环仅显示gridview的最后一个值,c#,asp.net,gridview,foreach,C#,Asp.net,Gridview,Foreach,我试图使用ASP.NET Gridview选择具有ID的特定人员,但只有最后一个用户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["M

我试图使用ASP.NET Gridview选择具有ID的特定人员,但只有最后一个用户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
调用中出现了某种无法解释的错误。不清楚是什么导致了这种错误,因为据我所知,您应该能够将
列表
作为第二个参数传递给
string.Join
。但是,您可以使用此代码强制整数列表成为字符串数组

 string inClause = string.Join(",", userIDList
                                    .Select(x => x.ToString())
                                    .ToArray()

您的查询位于循环内。在每个循环中,您都执行查询,并用查询结果替换先前的结果绑定网格。
当然,你只会得到最后一个结果

但是您不需要任何类型的循环,只需要使用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
调用中出现了某种无法解释的错误。不清楚是什么导致了这种错误,因为据我所知,您应该能够将
列表
作为第二个参数传递给
string.Join
。但是,您可以使用此代码强制整数列表成为字符串数组

 string inClause = string.Join(",", userIDList
                                    .Select(x => x.ToString())
                                    .ToArray()

感谢您的快速响应,但我“收到错误”以下方法或属性之间的调用不明确:'string.Join(string,params string[])和'string.Join(string,params object[])…userIDList的类型是什么?我假设它是一个
列表
我声明为私有列表userIDList=new List();这很奇怪,我在将列表传递给string.Join方法时没有这样的错误。现在正在执行一些检查…尝试使用此语法字符串。Join(“,”,userIDList.Select(x=>x.ToString()).ToArray());但错误是无法解释的。据我所知,您可以将列表作为第二个参数传递给string.Join此框架版本。感谢您的快速响应,但我“收到错误”以下方法或属性之间的调用不明确:“string.Join(string,params string[])和“string.Join(string,params object[])”…userIDList的类型是什么?我假设它是一个
List
我声明为private List userIDList=new List();这很奇怪,我在将List传递给string.Join方法时没有这样的错误。现在正在做一些检查…尝试使用这个语法字符串。Join(“,”,userIDList.Select(x=>x.ToString()).ToArray();但错误是无法解释的。据我所知,您可以将列表作为第二个参数传递给string.Join这个框架版本。