Ale fuj, to je teda kód. Pokud chcete, aby v DropDownListech bylo jen hodnoty, které se v GridView vyskytují v určitém sloupci, nemá smysl ty DropDownListy plnit z databáze. V GridView_DataBound projděte buňky daného sloupce ve všech řádcích a hodnoty do DropDownListů nagenerujte. Píšu z hlavy, takže v tom určitě budou chyby:
protected void GridView1_DataBound(object sender, EventArgs e)
{
FillDropDownListFromGrid("Category", "CategoryId", GridView1, DropDownList1);
}
public static void FillDropDownListFromGrid(string nameField, string valueField, GridView grid, DropDownList dropDown)
{
// projít všechny řádky
dropDown.Items.Clear();
foreach (GridViewRow row in grid.Rows)
{
// jen datové řádky (kašleme na hlavičky, zápatí, pager apod.)
if (row.RowType == RowType.DataRow)
{
// pokud tam položka ještě není, přidat
var value = ((DataRowView)row.DataItem)[valueField];
var name = ((DataRowView)row.DataItem)[nameField];
if (dropDown.Items.FindByValue(value) == null)
{
dropDown.Items.Add(new ListItem(name, value));
}
}
}
}
Parametr valueField je název sloupce, který obsahuje IDčko, nameField název sloupce, který obsahuje text, který se zobrazí (můžou být klidně stejné, pokud nemáte IDčko).
|