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

foreach loop only get last record to gridview c# asp.net

您好,我想使用字符串生成器从数据库中获取数据,这是我从会话中的上一页获取的。但是当 o 尝试绑定数据时,我只能在 gridview 中获取最后的数据。请帮忙

下面的代码是我如何从 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();
    }
}