如果有一个Gridview和两个数据表,并且有一个希望得到父行并将其绑定到gridview,那么如何做呢?
答案 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的其他人有用。