foreach循环只将最后一条记录获取到gridview c#asp.net



Hi想使用字符串生成器从数据库中获取数据,我在会话中从上一页获得了该生成器。但当我试图绑定数据时,我只得到网格视图中的最后一个数据。请帮助

下面的代码是我如何从gridview的复选框中获取多个值,并使用字符串生成器和会话将其传递到下一页。

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ConnectionString);
StringBuilder strb = new StringBuilder();
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridViewRow row = GridView1.Rows[i];
bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked;
if (isChecked)
{
// strb.Append(GridView1.Rows[i].Cells[7].Text ).AppendLine();
strb.Append(GridView1.Rows[i].Cells[7].Text).AppendLine();
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Please select items to continue');", true);
}
}
// Session["vendor"] = strb.ToString();
Session["vendor"] = strb.ToString().Trim('n');
Response.Redirect("order.aspx");
}
}

在第2页中,我使用该会话获取值并绑定到gridview中。问题是只从foreach循环中的字符串中获取最后一个值。

if (!this.IsPostBack)
{
if (Session["vendor"] != null)
{
string[] vendors = Session["vendor"].ToString().Split('n');
foreach (string vendor in vendors)
{
var data = vendor.Trim();

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ConnectionString);
sqlCommand cmd = new SqlCommand("select [Part number],Nomenclature,quantity,[quantity available],[unit price] from Catalouge where [Vendor Code]=('" + data + "')", conn);
conn.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
}
}
}

您正在遍历每个供应商并覆盖网格数据。相反,您可以一次获取所有供应商的数据,并将数据绑定到网格。

请参考以下逻辑

if (!this.IsPostBack)
{
if (Session["vendor"] != null)
{
string[] vendors = Session["vendor"].ToString().Split('n');
string all_vendors = string.Join("','", vendors).Replace(" ", "");
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ConnectionString);
sqlCommand cmd = new SqlCommand("select [Part number],Nomenclature,quantity,[quantity available],[unit price] from Catalouge where [Vendor Code] IN ('" + all_vendors + "')", conn);
conn.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
}
}

您正在一次又一次地为每个供应商代码绑定网格。

试试这个

if (!this.IsPostBack)
{
if (Session["vendor"] != null)
{
string[] vendors = Session["vendor"].ToString().Split('n');

var data = string.Join(", ", vendors.Select(v => $"'{v}'"));
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ConnectionString);
sqlCommand cmd = new SqlCommand("select [Part number],Nomenclature,quantity,[quantity available],[unit price] from Catalouge where [Vendor Code] in (" + data + ")", conn);
conn.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
}
}

最新更新