Utilizando um controle DropDownList em um DataGrid

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Veja neste artigo, como adicionar um controle DropDownList em um DataGrid, com atualização dos valores.

Utilizando um controle DropDownList em um DataGrid


Este artigo irá demonstrar como utilizar um controle DropDownList em um DataGrid. A parte essencial do arquivo DropDown.aspx é a seguinte:

 

 

Na segunda linha, configuramos a propriedade DataSource do controle DropDownList para uma função ‘GetCategory()’, esta função consulta os registros de Categoria do banco de dados e retorna um DataTable.  Na última linha, nós configuramos a propriedade SelectedIndex para a função ‘GetCategoryID’, esta função pega a Categoria atual como argumento e retorna a localização (um inteiro) da categoria (“Categoryname”). Isto habilita o controle DropDownList a exibir o nome correto da categoria do registro atual. A seguir o código C#:

 

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Data.OleDb;

using System.Configuration;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

 

namespace Management

{

  public class DropDown: System.Web.UI.Page

  {

       protected System.Web.UI.WebControls.DataGrid ProductGrid;

       protected DataTable _category;

 

       //cria uma classe de banco de dados para pegar os registros

//ProductDb é uma classe pública contendo diversar funções

       protected ProductDb pdb = new ProductDb();

         public DropDown()

         {

              Page.Init += new System.EventHandler(Page_Init);

         }

 

         private void Page_Load(object sender, System.EventArgs e)

         {

              if(!IsPostBack)

             {

                    BindProduct();

                   

             }

         }

 

         private void Page_Init(object sender, EventArgs e)

         {

              InitializeComponent();

         }

 

         void BindProduct()

         {

              //pdb.GetProduct() retorna um datatable para o datagrid

              ProductGrid.DataSource = pdb.GetProduct();

              ProductGrid.DataBind();

         }

 

         protected void Product_Edit(object sender, DataGridCommandEventArgs e)

         {

              BindCategory();

              ((DataGrid)sender).EditItemIndex = e.Item.ItemIndex;

              BindProduct();

         }

 

         protected void Product_Cancel(

            object sender, DataGridCommandEventArgs e)

         {

              ProductGrid.EditItemIndex = -1;

              BindProduct();

         }

 

         protected void Product_Update(

            object sender, DataGridCommandEventArgs e)

         {

             //pega o nome do produto atual

             string pname = e.Item.Cell[1].Controls[0].Text;

             //pega o preço do produto atual

             string price = e.Item.Cell[2].Controls[0].Text;

             //pega o categoryid atual

              DropDownList ddl =

               (DropDownList)e.Item.Cells[3].FindControl("DropDownList1");

              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...

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?