最初,我能够在asp转发器的代码隐藏中填充数据,如下所示:
public string guitarName = ConnectionClassGuitarItems.guitarName;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataSet ds = GetData();
Repeater1.DataSource = ds;
Repeater1.DataBind();
}
}
private void GetData()
{
string CS = ConfigurationManager.ConnectionStrings["musicStoreConnection"].ConnectionString;
string query = "SELECT * FROM stringInstrumentItem JOIN brand ON stringInstrumentItem.brandId = brand.brandId WHERE stringInstrumentItem.brandId IN(SELECT brand.brandId FROM brand WHERE name = @brand)";
using (SqlConnection con = new SqlConnection(CS))
{
using (SqlCommand comm = new SqlCommand(query, con))
{
con.Open();
comm.Connection = con;
comm.Parameters.Add(new SqlParameter("@brand", guitar));
comm.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
da.Fill(ds);
con.Close();
comm.Parameters.Clear();
return ds;
}
}
}
现在,我想将上面的代码更改为使用实体框架。到目前为止,我已经做到了这一点:
private void GetData()
{
MusicStoreDBEntities obj = new MusicStoreDBEntities();
List<stringInstrumentItem> name = new List<stringInstrumentItem>();
name = (from g in obj.stringInstrumentItems where g.brand.name == guitarName && g.type == "Guitar" select g).ToList();
DataSet ds = new DataSet();
}
我已经将原始sql更改为使用linq到实体并添加了新条件。但我不知道如何将实体框架中的数据绑定到asp转发器。我想知道如何使用实体框架在asp转发器中绑定数据。
已编辑:
我尝试按照下面的建议绑定它,但是它给了我一个异常错误,它不包含名称'name'指向这行代码的属性:&lt;%#Eval(“name” )%&gt; &lt;%#Eval(“model”)%&gt;。正如您所看到的,eval中的名称实际上是表品牌的一部分(请参阅下面的其他信息以了解我数据库中两个表的深入了解)。我之前对使用数据集的旧数据绑定方法没有问题,但是当我将其更改为使用实体框架时,它不再识别名称。可以只是查询吗?
以下是aspx文件的完整代码:
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="repeater_ItemDataBound">
<ItemTemplate>
<div class="one-two">
<asp:LinkButton ID="linkButton" OnClick="Repeater1_OnClick" runat="server" CommandArgument='<%# Eval("brandId") + ";" + Eval("model") %>'>
<asp:Image ID="brandImage" runat="server" ImageUrl='<%# Eval("itemimage1") %>' height="130px" width="350px" />
</asp:LinkButton>
<div class="content">
<div id="label"><%# Eval("name") %> <%# Eval("model") %></div>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
其他信息:
表stringInstrumentItem(列brandId是外键并引用表品牌的主键,也称为brandId):
的itemId brandId模型
1个1 XYZ
2 1 ABC
3 2 HJK
表品牌(其主键名为brandId,由表strinInstrumentItem引用):
brandId名称图像
1个伊瓦涅斯xyz.jpg
2挡泥板abc.jpg的
3吉布森hjk.jpg
答案 0 :(得分:1)
private List<stringInstrumentItem> GetInstruments()
{
var musicStoreContext = new MusicStoreDBEntities();
List<stringInstrumentItem> instruments =
(from g in obj.stringInstrumentItems
where g.brand.name == guitarName && g.type == "Guitar"
select g
).ToList();
return instruments;
}
您可以将Repeater和其他控件直接绑定到强类型对象,因此只需返回模型对象的列表。
请务必立即利用strongly typed repeaters。