如何从asp.net中的代码绑定datalist

时间:2014-11-23 17:11:15

标签: c# asp.net datalist

我想从asp.net中的代码绑定datalist

我从列表中选择产品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(); 
}

但我只看到了数据主义者的最后记录

3 个答案:

答案 0 :(得分:1)

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

下面的代码工作假设您知道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(); 

答案 1 :(得分:1)

如果我没有错,你正在尝试将字符串列表放入会话中。每次使用基于列表索引值的新字符串绑定datalist(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();

从产品中选择product_id,product_name,product_price,product_image_1,其中product_id IN(1,2,3,4,5 ...)“该查询用于获取items_id为1,2,3,4的所有数据,5 ......

答案 2 :(得分:0)

无需循环

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

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