2016-03-04 98 views
1

我想通过使用ASP.NET Gridview,但只有最后一个用户ID读取选择特定的人与他们的ID。假设我的ID为3,4和6,并且只有ID号6没有出现在Gridview表中,但出现了3和4。他们 甚至不应该出现3和4,因为我运行的SQL脚本为: WHERE NOT EmployeeId = " + userIDASP.NET foreach循环只显示gridview的最后一个值

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

回答

0

您所查询的是内循环。在每个循环中,您执行查询并将网格与查询REPLACING以前的结果进行绑定。
当然,你只会得到最后的结果。

但是,您不需要任何形式的循环,只需使用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通话某种unexplicable错误的。不清楚是什么导致它,因为,据我所知,你应该能够通过作为第二个参数string.Join。然而,你可能会迫使你的整数列表成为一个字符串数组,此代码

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

感谢您快速respons,但我'得到错误“的号召是ambigouse以下方法或电学性能的研究之间:“串.Join(string,params string [])和'string.Join(string,params object [])... –

+0

userIDList是什么类型?我认为它是一个'List ' – Steve

+0

我声明为私人列表 userIDList =新名单();? –

相关问题