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

时间:2016-03-04 21:51:52

标签: 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["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();
    }            
}

1 个答案:

答案 0 :(得分:0)

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

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