如何将参数从代码传递到asp.net

时间:2012-12-27 04:02:55

标签: asp.net webforms

我有一个aspx页面,我有一个gridview,在这个gridview中我添加了一个datalist,所以对于每一行我想要一个datalist,基本上该行包含一个Image,在datalist中我想显示一些关于图片,例如,卡车的图片和数据列表我想显示价格,年份等...所有这些数据都在数据库表中。

表库存设计:

Image,
Make,
Model,
Price,
Year, 
ID--primary key

此时我在gridview中显示图像,但是datalist显示了网格中每一行表格中的所有行我想要的只显示描述图像的数据当前行。例如,第一行应仅显示ID =“15的数据列表中的数据和ID =”16“的第二行,依此类推。

在填充数据主义者的SQLDataSource的SelectCommand中,我正在尝试传递“WHERE ID = @ID”参数并从代码隐藏页面获取它,这样我就可以操作数据并只显示与数据相对应的数据图像而不是每一行中的所有数据一遍又一遍。

<asp:GridView ID="GridView1" runat="server" 
  <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
                 SelectCommand="SELECT [ID], [Make], [Model], [Year], [Price] FROM [Inventory] 
                 WHERE ID = @ID" OnLoad = "SqlDataSource1_Load" 
                 OldValuesParameterFormatString="original_{0}" 
                 ConnectionString="<%$ ConnectionStrings:testConnectionString %>">
</asp:SqlDataSource>

这是我想要的东西,代码是什么

 public partial class Inventory : System.Web.UI.Page
   {
     protected System.Web.UI.WebControls.DataList DataList1;
     protected void Page_Load(object sender, EventArgs e)
       {
        }

     public void SqlDataSource1_Load(object sender, EventArgs e)
      {
          SqlDataSource1.SelectParameters.Add(new Parameter("ID", this would be where my ID 
                   should = the id of the image);
      }
  }

1 个答案:

答案 0 :(得分:0)

您正在采取的方法将导致每个网格视图行的数据库脱扣。更好的解决方案是在一次旅行中获取所有相关数据,然后将子数据列表与过滤后的项目绑定。例如,对存储过程(或具有两个查询的批处理)进行数据库调用,这将返回两个表 - 首先是可以绑定到grid-view的图像和id,而第二个表将包含来自所有id的其他信息。第一张桌子。现在,您可以将数据列表与过滤所需ID的DataView绑定。

有关嵌套数据绑定控件的各种示例,请参阅此MSDN文章 - http://msdn.microsoft.com/en-us/library/aa478959.aspx

另外,我也不确定数据列表信息(品牌,型号,价格,年份)是否具有给定ID /图像的多个值。如果情况并非如此,那么您根本不需要使用数据列表,而是使用模板字段为您想要实现的垂直布局使用自定义模板。