linq - 使用 ADO.NET 和. NET 4的ASP.NET Gridview,遍历 DataRelations

  显示原文与译文双语对照的内容
0 0

当一个有Gridview和两个datatable并希望获取父行并将它的绑定到Gridview时,该如何完成?

时间: 原作者:

0 0

我似乎解决了这个问题。 可以将数据源转换为类型化数据集,并将linq对象绑定到列。 下面是一个示例解决方案:


 protected void Page_Load(object sender, EventArgs e)
 {
 BindGridView();
 }

 private void BindGridView()
 {
 DataSet1 ds = new DataSet1();
 DataSet1TableAdapters.deb_MenuRecipeTableAdapter mr = new DataSet1TableAdapters.deb_MenuRecipeTableAdapter();
 DataSet1TableAdapters.deb_MenuRecipeCategoryTableAdapter mrc = new DataSet1TableAdapters.deb_MenuRecipeCategoryTableAdapter();
 DataSet1TableAdapters.rec_RecipeCategoryTableAdapter rc = new DataSet1TableAdapters.rec_RecipeCategoryTableAdapter();
 mr.Fill(ds.deb_MenuRecipe);
 mrc.Fill(ds.deb_MenuRecipeCategory);
 rc.Fill(ds.rec_RecipeCategory);

 GridView1.DataSource = ds;
 GridView1.DataMember = ds.deb_MenuRecipe.TableName;
 GridView1.DataBind();
 }

然后,可以使用服务器标记通过数据集解析引用:


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" 
 AllowPaging="true" BorderStyle="Dotted" 
 onpageindexchanging="GridView1_PageIndexChanging" PageSize="1"> 
<Columns>
 <asp:BoundField DataField="MenuRecipeID"/>
 <asp:TemplateField>
 <ItemTemplate>
 <asp:Label ID="lblName" runat="server" Text='<%# ((TestingPlatform.DataSet1) GridView1.DataSource).deb_MenuRecipe[Container.DataItemIndex].deb_MenuRecipeCategoryRow.MenuRecipeCategoryID %>'/>
 </ItemTemplate>
 </asp:TemplateField>
 <asp:TemplateField>
 <ItemTemplate>
 <asp:Label ID="lblName" runat="server" Text='<%# ((TestingPlatform.DataSet1) GridView1.DataSource).deb_MenuRecipe[Container.DataItemIndex].deb_MenuRecipeCategoryRow.rec_RecipeCategoryRow.RecipeCategory %>'/>
 </ItemTemplate>
 </asp:TemplateField>
</Columns>
</asp:GridView>

请注意,在解决方案中,项目和aspx文件中存在的命名空间是 TestingPlatForm 。 然后将Gridview数据源转换为类型化Dataset类型,然后通过关系的linq扩展遍历由Gridview绑定的行。

我希望这个解决方案对那些仍在使用 ADO.NET.的人来说是有用

原作者:
...