如何在 asp.net 中从代码隐藏绑定数据列表

本文关键字:隐藏 代码 绑定 数据 列表 asp net | 更新日期: 2023-09-27 18:31:32

我想从代码隐藏 asp.net 绑定数据列表

我正在从列表中获取产品 ID,并在其基础上选择所有产品

以下是我的代码:

List<string> r_items_grid = (List<string>)Session["recent_items"];
for(int i=0; i < r_items_grid.Count; i++)
{
    OleDbCommand cmd_r_items= new OleDbCommand("SELECT product_id,product_name,product_price,product_image_1 from products where product_id="+ Convert.ToInt32( r_items_grid[i]),con); 
    r_items_reader=cmd_r_items.ExecuteReader();
    DataList3.DataSource = r_items_reader;
    DataList3.DataBind(); 
}

但我只在数据列表中看到最后一条记录

如何在 asp.net 中从代码隐藏绑定数据列表

如果我

没记错的话,您正在尝试将字符串列表放入会话中。每次遍历整个列表时,都会使用基于列表索引值的新字符串绑定数据列表 (DataList3)。因此,它始终显示列表的最后一个字符串值。如果你想根据你的列表获取所有数据,你可以使用它

List<string> r_items_grid = (List<string>)Session["recent_items"];
string items_id= string.Join(",", r_items_grid);// items_id may be like 1,2,3,4,5.
OleDbCommand cmd_r_items= new OleDbCommand("SELECT product_id,product_name,product_price,product_image_1 from products where product_id IN ("+ items_id + ")",con); 
r_items_reader=cmd_r_items.ExecuteReader();
DataList3.DataSource = r_items_reader;
DataList3.DataBind();

"从 (1,2,3,4,5...) 的产品中选择 product_id product_id,product_name,product_price,product_image_1" 该查询用于获取items_id为 1,2,3,4,5...

问题是您一次选择一条记录,然后将其分配给数据源。当您这样做时,以前的值将被覆盖。因此,您只能看到上次查询的结果。您可以通过发出单个请求然后将其绑定到列表来修复它:

下面的代码假设你知道Session["recent_items"]存储整数,如果字符串有可能存储在那里,你就会有SQL注入的风险。

List<string> r_items_grid = (List<string>)Session["recent_items"];
string ids = string.Join(",", r_items_grid);    // Here you get IDs in format 1,2,3,4,5 etc.
OleDbCommand cmd_r_items= new OleDbCommand("SELECT product_id,product_name,product_price,product_image_1 from products where product_id IN ("+ ids + ")",con); 
r_items_reader=cmd_r_items.ExecuteReader();
DataList3.DataSource = r_items_reader;
DataList3.DataBind(); 

不需要 For 循环

您可以使用逗号分隔的列表

string  commaSepara = String.Join(",", r_items_grid);
OleDbParameters commaSepara=new OleDbParameters("@commaSepara",SqlDbType.NVarchar,-1);
commaSepara.Value=commaSepara;
OleDbCommand cmd_r_items= new OleDbCommand(@"SELECT product_id,product_name,product_price,product_image_1 from products where product_id
 IN ( @commaSepara )",con); 

r_items_reader=cmd_r_items.ExecuteReader();
DataList3.DataSource = r_items_reader;
DataList3.DataBind();