2012-02-21 5 views
2

Я разрабатываю приложение asp.net, и я застрял, поэтому я прошу о помощи.Как отображать данные из двух таблиц в gridview?

База данных: В моей базе данных (MySql) У меня есть компонент таблицы (idI, имя и т. Д.), И каждый ингредиент может иметь более одного типа ингредиентов (idT, type_name и т. Д.). Из-за многих-многих отношений у меня есть другая таблица, которая содержит идентификатор от ингредиента и идентификатор от типа ингредиента.

Приложение: В моем приложении у меня есть gridview, который отображает все данные из ингредиента. Я использую свой собственный метод FillGVIngredient для заполнения gridview с использованием набора данных и адаптера данных.

Вопрос: Как я могу отобразить другой столбец в моей GridView, который будет показывать все типы ингредиентов, которые принадлежат ингридиенту идентификатору (каждая строка в GridView представляет собой 1 ингредиент) со списком пули, так что выход будет выглядеть следующим образом:

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

* Типы ингредиентов должны отображаться в одной ячейке. Пример выше показывает 2 строки из gridview.

Я пробовал использовать поле шаблона с списком маркеров, но я не знаю, как выполнять итерацию по строкам, чтобы передать идентификатор ингредиента в sql-инструкцию для источника данных списка пули.

ответ

1

Вы на правильном пути. A BulletedList в TemplateField - правильный подход. Но вы должны использовать GridView's 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(); 
    } 
} 
Смежные вопросы