C# ASP.NET foreach循环仅显示gridview的最后一个值
我试图使用ASP.NET Gridview选择具有ID的特定人员,但只有最后一个用户ID读取。假设我的ID是3、4和6,只有ID号6没有出现在Gridview表中,而是出现了3和4。他们 甚至不应显示为3和4,因为我正在以以下方式运行sql脚本: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
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这个框架版本。