Utilizando um controle DropDownList
Este artigo irá demonstrar como utilizar um controle DropDownList em um DataGrid. A parte essencial do arquivo DropDown.aspx é a seguinte:
string categoryid = ddl.SelectedItem.Value;
//pega o productid atual
string pid = e.Item.Cell[4].Controls[0].Text;
//chama a função de atualização do pdb
pdb.update(pid, pname, price, categoryid);
ProductGrid.EditItemIndex=-1;
BindProduct();
}
void BindCategory()
{
//pdb.FetchCategory() retorna um datatable
_category = pdb.FetchCategory();
}
protected DataTable GetCategory()
{
return _category;
}
protected int GetCategoryID(string cname)
{
for(int i=0;i<_category.DefaultView.Count;i++)
{
if (_category.DefaultView[i]["categoryname"].ToString()==cname)
{
return i;
}
}
return 0;
}
#region Web Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
As partes essenciais deste código C# são:
1. Na função Product_Edit(), você precisa chamar BindCategory() para primeiro configurar a datatable_category, em seguida configurar a propriedade EditItemIndex para o DataGrid, e por último, chamar a função BindProduct(). O controle DropDownList não irá mostra nada se você inverter essa ordem, pois uma vez que você configura a propriedade EditItemIndex, o DataGrid começa a exibir os registros, e ao mesmo tempo, o controle DropDownList acessa a função ‘GetCategory()’ para pegar a fonte de dados. Se ‘GetCategory()’ não retorna nada, então você não irá ver nada sendo exibido. Apenas lembre: antes de configurar a propriedade EditItemIndex do DataGrid, configure a fonte de dados do controle.
2. Na função Product_Update(), você não possui acesso ao controle DropDownList diretamente, pois ele está embutido no DataGrid. A solução é pegar o valor da seleção do controle DropDownList utilizando a função ‘FindControl()’. Esta função recebe o nome do controle como parâmetro e retorna o controle que ele encontrar, então você pode utilizar o controle retornado para pegar o valor da seleção. Apenas lembre: utilize a função FindControl() para pegar qualquer controle que você deseje achar no datagrid, como TextBox, Text Area, Label, Calendar, etc...