如何在gridview中显示两个表的数据?

时间:2012-02-21 15:07:03

标签: asp.net gridview

我正在开发一个asp.net应用程序而且卡住了,所以我要求一些帮助。

数据库:在我的数据库(MySql)中,我有表格成分(idI,名称等),每种成分可以有多种成分类型(idT,type_name等)。由于有很多关系,我有另一个表,其中包含成分的id和成分类型的id。

应用程序:在我的应用程序中,我有gridview,显示来自成分的所有数据。我使用自己的方法FillGVIngredient来使用数据集和数据适配器填充gridview。

问题:如何在gridView中显示另一列,该列将显示属于成分id的所有成分类型(gridview中的每一行代表1种成分)和子弹列表,以便输出如下所示:

Ingredient_Type      Ingredient   id
--------------------------------------
-type 1*             ingredient1   1
-type 2*
-type 3*
--------------------------------------
-type 5              ingredient2   2
-type 6

*成分类型必须显示在单个单元格中。上面的示例显示了gridview中的2行。

我尝试使用带有项目符号列表的模板字段,但我不知道如何遍历行,以便将成员的id传递给项目符号数据源的sql语句。

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。 TemplateField中的BulletedList是正确的方法。但是你应该使用GridView的RowDataBound将它绑定到它的DataSource。看看:

protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow) {
        var rowView = (DataRowView)e.Row.DataItem;
        var bullet = (BulletedList)e.Row.FindControl("BulletedList1");
        // now get the DataSource according to the ID (f.e. rowView["Ingredient_ID"]) 
        bullet.DataSource = getIngredientTypes(rowView["Ingredient_ID"]);
        bullet.DataTextField = "Ingredient_Type";
        bullet.DataValueField = "Type_ID";
        bullet.DataBind();
    }
}