Personalizando o GRID VIEW manualmente agora...

27/11/2008


Carlos Boa Noite Solicito uma consultoria de como implementar uma solução para o seguinte problema Como montar uma tela de Cadastro, sem Wizard e ainda em 2 camadas(banco e aplicação) onde terei
que cadastrar os seguintes dados num_os, nome do usuario, tipo do equipamento, com defeito s/ n ? cad_os(Num_os int pk ,codusuario int, cod_equip int fk ,defeito_sn bolean) cad_eqp(cod_equip int,descricao varchar(20)) cad_usu(cod_usuario int, nomeusuario varchar(20))
O objetivo é entender como popular drowpdownlist sem usar SqlDataSource e usar algum em ASP.NET
talvez ajax, onde possa fazer a consutla do nome do cliente. Apos Cadastrado, os campos de Cad_Os deverão aparecer numa GRIDVIEW e na direita dos campos da tabela, aparecer icones para editar e excluir registros.
Não consegui uma maneira de colocar os botoes Edit , Exclui de modo que eles apareçam depois dos campos da tabela, com o uso do SqlDataReader. Ainda não entendi bem o uso do SqlAdatapter, SqlDataTable. Procurei algum exemplo na videos e artigos da Devmedia e não encontrei. Resolvi abrir uma consultoria. Muits de minhas duvidas podem ser bobas, mas não estou conseguindo posta-las no forum da DEVMEDIA para poder sanalas, e como isto é para meu aprimoramento no trabalho optei pela consultoria. Desde já agradeço a atenção []s Sérgio
Sergio Santos

Sergio Santos

Curtidas 0

Respostas

Guinther Pauli

Guinther Pauli

27/11/2008

Sérgio,   Desculpe-nos pela demora,   Estaremos dando prioridade ao seu chamado,   Guenta só mais um poquinho ai,     abs
GOSTEI 0
Guinther Pauli

Guinther Pauli

27/11/2008

Olá Sérgio, A Primeira coisa a fazer é construir uma classe de dados que retornara um DataSet com os registros para serem carregados na combo, como abaixo:             private void CarregarCliente()             {                   DataTable dt = cliente.Buscar();                     ddlCliente.DataSource = dt;                   ddlCliente.DataValueField = "cod_cliente";                   ddlCliente.DataTextField = "nom_cliente";                   ddlCliente.DataBind();                   ddlCliente.Items.Insert(0, new ListItem("Selecione", "0"));             } Onde cliente.Buscar() serão: Cliente = nome da classe de acesso aos dados no banco; Buscar = Nome do método que retorna o DataTable usado para pupular a combo.   Feito isto, vc deve motar sua Grid usando um UpdatePanel do Ájax, assim cada inserção no banco sua pagina é atualizada fazendo o RoundTrip sem dar um Post na tela.     Para montar a grid sem o Wizard, faça como no exemplo abaixo:               <asp:DataGrid id="dgTeste" Runat="server" Width="100%" CssClass="sua_classe_css" CellPadding="3"                   AutoGenerateColumns="False" BorderWidth="1px" BorderColor="Black">                   <HeaderStyle CssClass="cabecalho" BackColor="#CCCCFF"></HeaderStyle>                   <Columns>                         <asp:BoundColumn DataField="nome_coluna_1" HeaderText="Teste 1"></asp:BoundColumn>                         <asp:BoundColumn DataField="nome_coluna_2" HeaderText="Teste 2"></asp:BoundColumn>                         <asp:BoundColumn DataField="nome_coluna_3" HeaderText="Teste 3"></asp:BoundColumn>                         <asp:TemplateColumn HeaderText="Editar">                               <HeaderStyle HorizontalAlign="Center" Width="1px"></HeaderStyle>                               <ItemStyle HorizontalAlign="Center" CssClass="acao"></ItemStyle>                               <ItemTemplate>                                     <asp:ImageButton id="ibEditar" OnClick="Editar" runat="server" ImageUrl="../../Imagens/ico_editar.gif"></asp:ImageButton>                               </ItemTemplate>                         </asp:TemplateColumn>                         <asp:TemplateColumn HeaderText="Excluir">                               <HeaderStyle HorizontalAlign="Center" Width="1px"></HeaderStyle>                               <ItemStyle HorizontalAlign="Center" CssClass="acao"></ItemStyle>                               <ItemTemplate>                                     <asp:ImageButton id="ibExcluir" OnClick="Excluir" runat="server" ImageUrl="../../Imagens/ico_excluir.gif"></asp:ImageButton>                                     <asp:Label id="lbExcluir" Visible="False" runat="server">-</asp:Label>                               </ItemTemplate>                         </asp:TemplateColumn>                   </Columns>             </asp:DataGrid>   Da forma acima você consegue setar a ordem de suas colunas manualmente, e basta usar o evento RowDataBound (.net 2 ou superior) ou ItemDataBound (.net 1.1) para que os registros sejam instanciados na Grid já com os valores necessários para a recuperação, como abaixo:               private void dgTeste_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)             {                   if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))                   {                         int codUsuario = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "cod_usuario"));                         ImageButton ibEditar = e.Item.FindControl("ibEditar") as ImageButton;                         ImageButton ibExcluir = e.Item.FindControl("ibExcluir") as ImageButton;                                                 Label lbExcluir = e.Item.FindControl("lbExcluir") as Label;                           ibEditar.CommandArgument = codPaciente.ToString();                         ibExcluir.CommandArgument = codPaciente.ToString();                         ibExcluir.Attributes["onclick"] = "return confirmarExclusao(este Usuario);";                           lbExcluir.Visible = (registros != 0);                         ibExcluir.Visible = !(registros != 0);                   }             } Quando for clicado qualquer ícone, seja ele de Editar ou excluir serão chamados os métodos que farão as alterações e exclusão dos registros, lembrando que deve ser colocado uma mensagem js cliente de confirmação no caso de exclusão. Código dos métodos dos eventos de Edição e Exclusão:               protected void Editar(object sender, System.Web.UI.ImageClickEventArgs e)             {                   ExecutarEdicao(Convert.ToInt32((sender as ImageButton).CommandArgument));             }               protected void Excluir(object sender, System.Web.UI.ImageClickEventArgs e)             {                   cliente.Excluir(Convert.ToInt32((sender as ImageButton).CommandArgument));             }   Código javascript necessario para mensagem de exclusão: function confirmarExclusao(item, extra) {       return confirm("Voce deseja realmente excluir " + item + "?\n\nATENCAO: Esta acao nao podera ser desfeita." + ((typeof(extra) != "undefined") ? "\n\nOBSERVACAO: " + extra : "")); }   Aguardamos seu retorno,      abs
GOSTEI 0
Sergio Santos

Sergio Santos

27/11/2008

Guinter   1o) Qto a questão da DropDownList, se eu usar a mesma DropDownlist como poderei reutilizar o codigo?   2o) Não entendi ou talvez não achei em que lugar a GRIDVIEW é populada com o DataSource de modo que os Imagensbuttons fiquem a direita dos dados   Fico no aguardo!   Atte Sérgio
GOSTEI 0
Guinther Pauli

Guinther Pauli

27/11/2008

Olá Sérgio,   O chamado foi trocado de consultor,   Quem estará lhe acompanhando neste chamado é o Luiz Maia,   abs.
GOSTEI 0
Luiz Maia

Luiz Maia

27/11/2008

Bom dia Sérgio,   Quanto ao DDL, você terá uma classe de negócios onde terá o metodo que retorna os registros para popular a DDL, no caso vc pode passar o controle DDL por parametro e chamar a classe que faz o preenchimento, como abaixo, você poderá reaproveitar somente a estrutura de negócio, o controle não. Portanto terá que ter varios controles em diferentes páginas que serão populados pelo mesmo método, que estará num classe diferente que será instanciada em suas páginas aspx:               private void CarregarDDL(DropDownList ddl)             {                   DataTable dt = cliente.Buscar();                     ddl.DataSource = dt;                   ddl.DataValueField = "cod_cliente";                   ddl.DataTextField = "nom_cliente";                   ddl.DataBind();                   ddl.Items.Insert(0, new ListItem("Selecione", "0"));             }  Em relação ao GridView, como você pode ver no comentário anterior, suas colunas são montadas da maneira que você bem entender. No código da GV as colunas de edição e exclusão, com os ImageButons são as duas últimas colunas da grig, no caso eles são TemplateColuns:                           <asp:TemplateColumn HeaderText="Editar">                               <HeaderStyle HorizontalAlign="Center" Width="1px"></HeaderStyle>                               <ItemStyle HorizontalAlign="Center" CssClass="acao"></ItemStyle>                               <ItemTemplate>                                     <asp:ImageButton id="ibEditar" OnClick="Editar" runat="server" ImageUrl="../../Imagens/ico_editar.gif"></asp:ImageButton>                               </ItemTemplate>                         </asp:TemplateColumn>                         <asp:TemplateColumn HeaderText="Excluir">                               <HeaderStyle HorizontalAlign="Center" Width="1px"></HeaderStyle>                               <ItemStyle HorizontalAlign="Center" CssClass="acao"></ItemStyle>                               <ItemTemplate>                                     <asp:ImageButton id="ibExcluir" OnClick="Excluir" runat="server" ImageUrl="../../Imagens/ico_excluir.gif"></asp:ImageButton>                                     <asp:Label id="lbExcluir" Visible="False" runat="server">-</asp:Label>                               </ItemTemplate>                         </asp:TemplateColumn>   E para preenchimento da grid você deve usar um método:   private void PopulaGrid() { DataTable resultado = cliente.Buscar(); dvSuaGrid.DataSource = resultado; dvSuaGrid.DataBind(); }   Abraços Sergio, caso haja alguma dúvida, estou a disposição.   Att, Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

27/11/2008

Sergio,   Dê uma olhada neste vidio aula: https://www.devmedia.com.br/cursos/listcurso.asp?curso=77   Aqui tem algumas coisas que serão úteis para você. Caso nâo tenha acesso, por favor me avise para que eu possa providenciar.   Abraços   Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

27/11/2008

Sérgio,   Espero que tenha resolvido o problema. Como não obtive seu retorno, estou considerando o chamado encerrado. Estou a disposição para qualquer dúvida eventual.   Abraços   Att, Luiz Maia
GOSTEI 0
POSTAR