使用ADO.NET和.NET 4遍历ASP.NET Gridview中的DataRelations

时间:2010-09-29 10:49:09

标签: asp.net linq ado.net

如果有一个Gridview和两个数据表,并且有一个希望得到父行并将其绑定到gridview,那么如何做呢?

1 个答案:

答案 0 :(得分:1)

我似乎解决了这个问题。可以将数据源强制转换为类型化数据集,并将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数据源转换为类型化的数据集类型,并通过关系的linq扩展遍历gridview绑定的行。

我希望这个解决方案对可能仍在使用ADO.NET的其他人有用。