DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

EXPLORANDO O CONTROLE DATALIST - Parte 02

Continuando com a série de artigos sobre DataList, venho neste artigo mostrar as funcionalidades deste controle quanto a edição de dados...

Saudações pessoal,

Continuando com a série de artigos sobre DataList, venho neste artigo mostrar as funcionalidades deste controle quanto a edição de dados.

Então vamos ao trabalho....

 

Edição de Dados em um Controle DataList

 

O controle de DataList suporta a edição in-place dos dados em um registro através de sua propriedade EditItemTemplate. O EditItemTemplate define o conteúdo e a aparência do item quando está sendo editado. Por exemplo, o seguinte Template inclui uma caixa de texto, um botão de “Update” e um botão de “Cancelar”.

 

 

<EditItemTemplate>

    Item: <asp:TextBox

            id="Text1"

            runat="server"

            Text=<%# DataBinder.Eval(Container.DataItem, "Campo")%>

    /><br>

   

<asp:LinkButton

    id="button1"

    runat="server"

    Text="Salvar"

    CommandName="update"

    />

<asp:LinkButton

     id="button2"

     runat="server"

     Text="Cancelar"

     CommandName="cancel"

    />

</EditItemTemplate>

 

 

O EditItemTemplate interage com uma outra propriedade: EditItemIndex. Por default, o valor de EditItemIndex é -1, significando que nenhum dos registros na lista está sendo editado. Quando EditItemIndex é ajustado a um registro em particular, esse registro é alterado usando o EditItemTemplate.

 

 

O DataList fornece também eventos que podem ser usados na edição.

EditCommand é chamado quando o usuário clica no botão (comando “update”) Editar dentro de ItemTemplate do DataList. Você pode adicionar código a este evento. A propriedade EditItemIndex é ajustada ao registro selecionado, e então executa um rebinds nos dados do DataList como mostrado no exemplo que segue.

 

protected void DataList_EditCommand(object Source, DataListCommandEventArgs e)

  {

    DataList1.EditItemIndex = (int)e.Item.ItemIndex;

    BindList();

  }

 

 

O EditItemTemplate contem tipicamente botões de comando de “update” e “cancel”. Estes botões chamam os eventos de UpdateCommand e CancelCommand, respectivamente. Você pode também programar estes eventos em seu código. A lógica para “cancelar” a edição de um registro é ajustar EditItemIndex a -1, e então fazer um rebinds dos dados ao DataList como mostrado no exemplo abaixo.

 

protected void DataList_CancelCommand(object Source, DataListCommandEventArgs e)

  {

    DataList1.EditItemIndex = -1;

    BindList();

  }

 

 

 

A lógica típica para fazer um “update” e atualizar a origem dos dados é ajustar EditItemIndex em -1, e então efetuar um rebinds (recarga) dos dados ao DataList. O exemplo abaxio mostra a edição de registros em um DataList.

 

 

 

 

<%@ Import Namespace="System.Data" %>

 

<html>

<head>

    <script language="C#" runat="server">

 

    public DataTable Cart;

    public DataView CartView;

 

    void Page_Load(Object Sender, EventArgs E) {

        if (Session["DL3_ShoppingCart"] == null) {

            Cart = new DataTable();

            Cart.Columns.Add(new DataColumn("Qty", typeof(string)));

            Cart.Columns.Add(new DataColumn("Item", typeof(string)));

            Cart.Columns.Add(new DataColumn("Price", typeof(string)));

            Session["DL3_ShoppingCart"] = Cart;

 

            // carregar a primeira vez -- popula com alguns dados

            for (int i=1; i<5; i++) {

                DataRow dr = Cart.NewRow();

                dr[0] = ((int)((i%2)+1)).ToString();

                dr[1] = "Item " + i.ToString();

                dr[2] = ((double)(1.23 * (i+1))).ToString();

                Cart.Rows.Add(dr);

            }

        }

        else

            Cart = (DataTable)Session["DL3_ShoppingCart"];

 

        CartView = new DataView(Cart);

        CartView.Sort = "Item";

        if (!IsPostBack)

            BindList();

    }

 

    void BindList() {

        DataList1.DataSource= CartView;

        DataList1.DataBind();

    }

 

    void DataList_EditCommand(Object Sender, DataListCommandEventArgs e) {

        DataList1.EditItemIndex = (int)e.Item.ItemIndex;

        BindList();

    }

 

    protected void DataList_CancelCommand(Object Sender, DataListCommandEventArgs e) {

        DataList1.EditItemIndex = -1;

        BindList();

    }

 

    protected void DataList_UpdateCommand(Object Sender, DataListCommandEventArgs e) {

        string item = ((System.Web.UI.WebControls.Label)e.Item.FindControl("Label1")).Text;

        string qty = ((System.Web.UI.WebControls.TextBox)e.Item.FindControl("Text1")).Text;

        string price = ((System.Web.UI.WebControls.TextBox)e.Item.FindControl("Text2")).Text;

 

        // com um banco de dados aqui usaria o comando Update. Como estamos usando

        // um DataTable em memória, vamos deletar a linha velha e substituí-la por uma nova entrada

       

        //remove a linha

        CartView.RowFilter = "Item="+item+"";

        if (CartView.Count > 0) //Se o item existe no carrinho

            CartView.Delete(0); //Deleta

        CartView.RowFilter = "";

 

        //Adiciona a nova entrada

        DataRow dr = Cart.NewRow();

        dr[0] = qty;

        dr[1] = item;

        dr[2] = price;

        Cart.Rows.Add(dr);

 

        DataList1.EditItemIndex = -1;

        BindList();

    }

    </script>

</head>

<body>

 

    <h3><font face="Verdana">Editando dados em um DataList</font></h3>

    <p></p>

    <form id="Form1" runat=server>

    <font face="Verdana" size="-1">

        <asp:DataList id="DataList1" runat="server"

            BorderColor="black"

            BorderWidth="1"

            GridLines="Both"

            CellPadding="3"

            CellSpacing="0"

            Font-Names="Verdana"

            Font-Size="8pt"

            Width="150px"

            HeaderStyle-BackColor="#aaaadd"

            AlternatingItemStyle-BackColor="Gainsboro"

            EditItemStyle-BackColor="lightgreen"

            OnEditCommand="DataList_EditCommand"

            OnUpdateCommand="DataList_UpdateCommand"

            OnCancelCommand="DataList_CancelCommand"

            >

              <HeaderTemplate>

                ITENS...

              </HeaderTemplate>

              <ItemTemplate>

                <asp:LinkButton

                    id="button1"

                    runat="server"

                    Text="Editar"

                    CommandName="edit" />

                <%# DataBinder.Eval(Container.DataItem, "Item") %>

              </ItemTemplate>

             

              <EditItemTemplate>

                Item:

                <asp:Label

                    id="Label1"

                    runat="server"

                    Text=<%# DataBinder.Eval(Container.DataItem, "Item") %> />

                <br>

                Quantidade:

                <asp:TextBox

                    id="Text1"

                    runat="server"

                    Text=<%# DataBinder.Eval(Container.DataItem, "Qty") %> />

                <br>

                Preço R$:

                <asp:TextBox

                    id="Text2"

                    runat="server"

                    Text=<%# DataBinder.Eval(Container.DataItem, "Price") %> />

                <br>

                <asp:LinkButton

                    id="button2"

                    runat="server"

                    Text="Update"

                    CommandName="update" />

                <asp:LinkButton

                    id="button3"

                    runat="server"

                    Text="Cancelar"

                    CommandName="cancel" />

              </EditItemTemplate>

        </asp:DataList>

    </font>

    </form>

</body>
</html>

 

E é isso pessoal...

No próximo artigo sobre DataList vou mostrar um exemplo onde faço uma conexão com SQL Server 2005 exibindo organizadamente os dados de uma tabela de produtos. O exemplo será baseado em uma editora de livros listando os dados com imagens etc.

Um abraço e até o próximo artigo...


Valdir Da Rosa Silva
Profissional da área de Informática a 8 anos, trabalhou com Treinamentos em informática durante 4 anos nas áreas de Programação (ASP, PHP e MySQL) no centro de Treinamento Informatize (http://www.informatize.com.br). Atualmente desenvolve um trabalho independente com a empresa SKA Render Works do Po...
O que você achou deste post?

    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03