Trabalhar com edição de GridView
Oi!
Gostaria de saber de vocês, se existe a melhor maneira de se trabalhar com gridview em projetos quando se está em modo de edição. Até o momento, sei que existe:
- Trabalhar com edição no próprio gridview;
- Obter os dados da linha do gridview que deseja alterar, coloca-los nos campos da página e por meio de um botão (Salvar, por exemplo) realizar alteração ou inclusão dos campos;
- Abri uma janela de popup para editar os campos e salvar as alterações.
Nos projetos que trabalhei já me deparei com estas três formas (provavelmente existam mais), e gostaria de saber se existe uma mais adequada para eu adotar como padrão nos projetos da empresa.
Fico no aguardo!
Obrigado
Carlos Nogueira
Curtidas 0
Respostas
Luiz Maia
19/05/2010
Ola Carlos,
Realmente existem várias formas de edição de itens. Logicamente, depende muito da massa de dados e do tamanho do projeto. Imagina você alterar diretamente na grid uma tabela que possui muitos campos, incluindo campos do tipo Text. Não rola né?
Particularmente eu prefiro fazer a parte de Edição fora da GridView, assim o usuário tem um ganho enorme em navegabilidade e usabilidade. Desta forma, vc consegue usar Validators, usar RadioButtons, combobox (restringue os domínios) e etc... O usuário agradece!!!
Sempre faço o seguinte: Crio somente um webform e dentro dele tenho Paineis, assim não preciso criar varios arquivos. Segue um exemplo:
<%@ Page Title="" Language="C#" MasterPageFile="~/Master/MasterPage.master" AutoEventWireup="true"
CodeFile="Obra.aspx.cs" Inherits="Administracao_Obra" %>
<asp:Content ID="cpConteudo" ContentPlaceHolderID="cphBoby" runat="Server">
<asp:Panel ID="pnBusca" runat="server">
Palavra-chave:
<asp:TextBox ID="tbPalavraChave" runat="server" Width="300px"></asp:TextBox>
<asp:Button ID="btPesquisar" runat="server" Text="Pesquisar" CssClass="botao" Width="70px"
OnClick="btPesquisar_Click" />
<asp:Button ID="btNovo" runat="server" OnClick="btNovo_Click" Text="Novo" CssClass="botao"
Width="70px" />
</asp:Panel>
<asp:Panel ID="pnListagem" runat="server">
<br />
<asp:GridView ID="gvRegistros" runat="server" AutoGenerateColumns="False" OnRowDataBound="gvRegistros_RowDataBound"
OnPageIndexChanging="gvRegistros_PageIndexChanging">
<Columns>
<asp:BoundField HeaderStyle-Width="20%" DataField="cod_obra" HeaderText="Código Obra" />
<asp:BoundField HeaderStyle-Width="40%" DataField="nom_obra" HeaderText="Nome Obra" />
<asp:BoundField HeaderStyle-Width="10%" DataField="ind_possui_rua" HeaderText="Tem Rua" />
<asp:BoundField HeaderStyle-Width="15%" DataField="vlr_distancia_minima_1" HeaderText="Distância Min. 1" />
<asp:BoundField HeaderStyle-Width="15%" DataField="vlr_distancia_minima_2" HeaderText="Distância Min. 2" />
<asp:TemplateField HeaderStyle-HorizontalAlign="Center" HeaderStyle-Width="40px"
HeaderText="Excluir" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="ibExcluir" runat="server" ImageUrl="~/Imagens/btn_excluir.gif"
OnClientClick="javascript:return ConfirmaExclusaoParentes('esta Obra', 'Esta ação excluirá todas as Obras Secundárias!');"
OnCommand="Excluir" />
<asp:Label ID="lbExcluir" runat="server" Text="-" Visible="false"></asp:Label>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Label ID="lbQtRegistros" runat="server" CssClass="informacoes"></asp:Label>
</asp:Panel>
<asp:Panel ID="pnEditar" runat="server" Visible="False" Width="100%" HorizontalAlign="Left">
<fieldset>
<legend>
<asp:Label ID="lbObra" runat="server"></asp:Label></legend>
<br />
<p>
<b>Código:<asp:RequiredFieldValidator ID="rfvCodigoObra" runat="server" ControlToValidate="tbCodigoObra"
ErrorMessage="Código da Obra.">*</asp:RequiredFieldValidator>
</b>
<br />
<asp:TextBox ID="tbCodigoObra" runat="server" MaxLength="10" Width="100px"></asp:TextBox>
</p>
<p>
<b>Nome da Obra:<asp:RequiredFieldValidator ID="rfvNomeObra" runat="server" ControlToValidate="tbNomeObra"
ErrorMessage="Nome da Obra.">*</asp:RequiredFieldValidator>
</b>
<br />
<asp:TextBox ID="tbNomeObra" runat="server" MaxLength="40" Width="350px"></asp:TextBox>
</p>
<p>
<b>Distância Min 1:<asp:RequiredFieldValidator ID="rfvDistMin1" runat="server" ControlToValidate="tbDistMin1"
ErrorMessage="Distância Min. 1">*</asp:RequiredFieldValidator>
</b>
<br />
<asp:TextBox ID="tbDistMin1" runat="server" MaxLength="3" Width="100px"></asp:TextBox>
</p>
<p>
<b>Distância Min 2:<asp:RequiredFieldValidator ID="rfvDistMin2" runat="server" ControlToValidate="tbDistMin2"
ErrorMessage="Distância Min. 2">*</asp:RequiredFieldValidator>
</b>
<br />
<asp:TextBox ID="tbDistMin2" runat="server" MaxLength="3" Width="100px"></asp:TextBox>
</p>
<p>
<b>
<asp:CheckBox ID="cbTemRua" runat="server" CssClass="sem-estilo" Text="Tem rua?" /></b>
</p>
</fieldset>
<br />
<asp:Button ID="btSalvar" runat="server" CssClass="botao" OnClick="btSalvar_Click"
Text="Salvar" Width="100px" />
<asp:Button ID="btVoltar" CssClass="botao" Width="100px" runat="server" Text="Cancelar"
CausesValidation="False" OnClick="btVoltar_Click" />
<asp:Label ID="lbMensagem" CssClass="erro" runat="server"></asp:Label>
</asp:Panel>
<br />
</asp:Content>
Abraços
Luiz Maia
GOSTEI 0
Carlos Nogueira
19/05/2010
Olá Luiz,
Ah, valeu mesmo pela dica, eu vou seguir se conselho, também estava pensando que a edição fora do grid seria muito melhor, principalmente no que diz respeito a muitos dados em uma mesma linha para exibir para edição, como você mesmo havia dito.
Ah, gostei da dica dos panels, eu irei fazer o mesmo aqui, acredito que desta forma fique bom para eu pessoal seguir um padrão de página (ou pelo menos espero, rsrs)..
Muito obrigado! Se desejar, pode finalizar este chamado!
Abraços,
Até mais
GOSTEI 0
Luiz Maia
19/05/2010
Blz Carlos, precisando é so falar... estamos a disposição.
Abraços
Att
Luiz Maia
GOSTEI 0