Fórum Problema com Classes #4113

27/03/2009

0

Amigos,     Estou com um problema Relacionado a op;áo de Delete por uma Classe,     Abaixo segue o Código da Página: <asp:GridView ID="grdRegiao" runat="server" AutoGenerateColumns="False" DataSourceID="dsRegiao" AllowPaging="True" DataKeyNames="CODIGO_REG"> <RowStyle CssClass="rowA" /> <Columns> <asp:TemplateField HeaderText="Edi‡Æo"> <ItemTemplate> <asp:LinkButton ID="lnkEdit" runat="server" CommandName="Select">Editar</asp:LinkButton> &nbsp; / <asp:LinkButton ID="lnkDelete" runat="server" CommandName="Delete" OnClientClick="return confirm('Deseja excluir esta REGIÇO? ')">Excluir</asp:LinkButton> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="NOME_REG" HeaderText="RegiÆo" SortExpression="NOME_REG" /> </Columns> <HeaderStyle CssClass="rowH" /> <AlternatingRowStyle CssClass="rowB" /> </asp:GridView> <br /> <asp:ObjectDataSource ID="dsRegiao" runat="server" InsertMethod="Insert" SelectMethod="SelectRegiao" TypeName="Setri.Prominent.Regiao" DeleteMethod="DeleteRegiao"> <DeleteParameters> <asp:Parameter Name="CodigoId" Type="Int32" /> </DeleteParameters> <InsertParameters> <asp:Parameter Name="title" Type="String" /> </InsertParameters> </asp:ObjectDataSource>     Segue o Código da Classe:     using System; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Linq; using System.Web; using System.Web.Configuration; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Collections.Generic;     namespace Setri.Prominent { /// <summary> /// Classe de RegiÆo /// </summary> [System.ComponentModel.DataObject] public class Regiao { private static readonly string _connectionstring; private int _CODIGO_REG; private string _NOME_REG; public int CODIGO_REG { get { return _CODIGO_REG; } set { _CODIGO_REG = value; } } public string NOME_REG { get { return _NOME_REG; } set { _NOME_REG = value; } } static Regiao() { _connectionstring = WebConfigurationManager.ConnectionStrings["CsConexao"].ConnectionString; } public Regiao(SqlDataReader reader) { _CODIGO_REG = (int)reader["CODIGO_REG"]; _NOME_REG = (string)reader["NOME_REG"]; } /// <summary> /// Seleciona as Regiäes do Banco de Dados /// </summary> /// [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select,true)] public static List<Regiao> SelectRegiao() { //Inicializa o Command SqlConnection con = new SqlConnection(_connectionstring); SqlCommand cmd = new SqlCommand("SelectRegiao",con); cmd.CommandType = CommandType.StoredProcedure; List<Regiao> results = new List<Regiao>(); using (con) { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { results.Add(new Regiao(reader)); } con.Close(); return results; } }   [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)] public static Regiao SelecById(int CategoryID) { //Initialize command SqlConnection con = new SqlConnection(_connectionstring); SqlCommand cmd = new SqlCommand("SelectRegiaoByID",con); cmd.CommandType = CommandType.StoredProcedure; //Initialize parameters cmd.Parameters.AddWithValue("@CODIGO_REG", CategoryID); Regiao result = null; using(con) { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); if(reader.Read()) result =new Regiao(reader); } con.Close(); return result; } //<summary> //Create a new category //</summary> //<param name="parentId"></param> [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)] public static void Insert(string title) { //Initialize command SqlConnection con = new SqlConnection(_connectionstring); SqlCommand cmd = new SqlCommand("InsertRegiao ", con); cmd.CommandType = CommandType.StoredProcedure; //Initialize parameters cmd.Parameters.AddWithValue("@NOME_REG", title); using (con) { con.Open(); cmd.ExecuteNonQuery(); } con.Close(); }   /// <summary> /// Update an existing category /// </summary> [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)] public static void Update(int CODIGO_REG, string NOME_REG) { // Initialize command SqlConnection con = new SqlConnection(_connectionstring); SqlCommand cmd = new SqlCommand("UpdateRegiao", con); cmd.CommandType = CommandType.StoredProcedure; // Initialize parameters cmd.Parameters.AddWithValue("@CODIGO_REG", CODIGO_REG); cmd.Parameters.AddWithValue("@NOME_REG", NOME_REG); using (con) { con.Open(); cmd.ExecuteNonQuery(); } con.Close(); }   /// <summary> /// Select a Category by Category Id /// </summary> [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)] public static Regiao SelectById(int CodigoId) { // Initialize command SqlConnection con = new SqlConnection(_connectionstring); SqlCommand cmd = new SqlCommand("SelectRegiaoById", con); cmd.CommandType = CommandType.StoredProcedure; // Initialize parameters cmd.Parameters.AddWithValue("@CODIGO_REG", CodigoId); Regiao result = null; using (con) { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); if (reader.Read()) result = new Regiao(reader); } return result; con.Close(); }   /// <summary> /// Delete a category /// </summary> [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)] public static void DeleteRegiao(int CodigoId) { // Initialize command SqlConnection con = new SqlConnection(_connectionstring); SqlCommand cmd = new SqlCommand("DeleteRegiao", con); cmd.CommandType = CommandType.StoredProcedure; // Initialize parameters cmd.Parameters.AddWithValue("@CODIGO_REG", CodigoId); using (con) { con.Open(); cmd.ExecuteNonQuery(); } } } }     O problem esta quando clico no Botão Excluir do GRid,   recebo esta mensagem.       Server Error in '/Setri' Application. ObjectDataSource 'dsRegiao' could not find a non-generic method 'DeleteRegiao' that has parameters: CodigoId, CODIGO_REG.       Podem me ajuda?         A stored Procedure e a Conexão,   estão Funcionando e os nomes dos parametros estão corretos!      
Fernando Reis

Fernando Reis

Responder

Posts

27/03/2009

Fernando Reis

Ola,  Alguma resposta ?
Responder

Gostei + 0

27/03/2009

Luiz Maia

Me mande o codigo da SP DeleteRegiao, por favor.
Responder

Gostei + 0

27/03/2009

Fernando Reis

Ola Luiz,   Obrigado pelo Retorno,     Eu postei abaixo,   mas segue novamente.     [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)] public static void DeleteRegiao(int CodigoId) { // Initialize command SqlConnection con = new SqlConnection(_connectionstring); SqlCommand cmd = new SqlCommand("DeleteRegiao", con); cmd.CommandType = CommandType.StoredProcedure; // Initialize parameters cmd.Parameters.AddWithValue("@CODIGO_REG", CodigoId); using (con) { con.Open(); cmd.ExecuteNonQuery(); } }   Obrigado,   Estou no aguardo
Responder

Gostei + 0

27/03/2009

Luiz Maia

Fernando, preciso da SP = Stored Procedure. Abraços   Att Luiz Maia
Responder

Gostei + 0

27/03/2009

Fernando Reis

Segue.   SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[DeleteRegiao] ( @CODIGO_REG int ) AS SET NOCOUNT OFF; DELETE FROM [TBL_REGIAO] WHERE (([CODIGO_REG] = @CODIGO_REG))
Responder

Gostei + 0

27/03/2009

Luiz Maia

Fernando,   Se vc executar a Sp direto da base tipo abaixo, passando o Id como parametro   exec DeletaRegiao 3     Funciona? Abraços
Responder

Gostei + 0

27/03/2009

Fernando Reis

Luiz,     Teste a Procedure e funiona Sim,   Apenas modifgiquei de   exec DeletaRegiao 3 para   exec DeleteRegiao 3     
Responder

Gostei + 0

27/03/2009

Fernando Reis

Luiz,        Este problema não esta relacionado com o Envio do parametro?   Penso assim pois parei meu DEbug no Metodo de Delete dentro da Classe e ele Nem chega até lá,   ???   Abraço
Responder

Gostei + 0

27/03/2009

Luiz Maia

Fernando,   De posse destas informações todas que me mandou, e não tendo resolvido o problema ainda, pesso que aguarde mais pois vou simular toda sua aplicação em minha maquina e ver se o erro persiste para mim tb, ok?   Te dou noticias mais tarde. Abraços   Att Luiz Maia
Responder

Gostei + 0

27/03/2009

Luiz Maia

Fernando preciso que me mande seu projeto, pode compacta-lo e colocar no Disco Virtual para que eu corriga para vc?   Mas antes que faça isto, tente fazer uma busca em todo o projeto pelo metodo DeleteRegiao, nos arquivos XML gerados confira se esta tudo correto quanto aos parametros.   Vc esta usando o Linq ou EDM?   Abraços Att   Luiz Maia 
Responder

Gostei + 0

27/03/2009

Luiz Maia

Fernando,   Descobri seu problema.   Consegui simular o erro aqui. Mude as seguintes tags em amarelo:   public static void DeleteRegiao(int CODIGO_REG) { // Initialize command SqlConnection con = new SqlConnection(_connectionstring); SqlCommand cmd = new SqlCommand("DeleteRegiao", con); cmd.CommandType = CommandType.StoredProcedure; // Initialize parameters cmd.Parameters.AddWithValue("@CODIGO_REG", CODIGO_REG); using (con) { con.Open(); cmd.ExecuteNonQuery(); } }   E no DataSource:   <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="DeleteRegiao" InsertMethod="Insert" SelectMethod="SelectRegiao" TypeName="Setri.Prominent.Regiao" UpdateMethod="Update"> <DeleteParameters> <asp:Parameter Name="CODIGO_REG" Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="CODIGO_REG" Type="Int32" /> <asp:Parameter Name="NOME_REG" Type="String" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="title" Type="String" /> </InsertParameters> </asp:ObjectDataSource>   O projeto esta aqui, caso queira dar uma olhada:   http://video.devmedia.com.br/naoexclusivo/LuizMaia/Consultoria/fernando02.zip   Abraços e aguardo seu retorno. Att   Luiz Maia 
Responder

Gostei + 0

28/03/2009

Fernando Reis

Luiz,     Quer dizer que o erro esta no Nome da Parâmetro,   poxa que coisa,   Eu consegui fazer esta funcionando, mas sinceramente não entendi o porque, ..   kkkk       Uma ultima pergunta,     Usei o mesmo método para o Insert e Update,  e funcionu também,     Veja o problema,   Abro um FormView,   Insiro o nome da Região Clico em Insert e automaticamente o GridView é Arrumado também,   mas se aperto o F5 (POSTBACK)  ELE ACRESCENTA O MESMO REGISTRO NOVAMENTE,   COMO RESOLVER ISTO?  
Responder

Gostei + 0

28/03/2009

Luiz Maia

Usa o recurso abaixo:   if (!IsPostBack) {    SeuMetodoAqui(); }   Abraços   Att Luiz Maia
Responder

Gostei + 0

30/03/2009

Fernando Reis

Luiz,     Conheço sim esta opção, sem problema, mas minha dúvida é, No Formulário que estamos conversando, este não possui Métodos, As informações estâo nas Classes fora da página,   Então como utilizar o   IF (!ispostBack) nesta situação?   Fernando    
Responder

Gostei + 0

30/03/2009

Luiz Maia

Mas o formulario que vc fala é um arquivo .aspx? Se é ele tem um metodo PagaLoad, dai vc faz a chamada lá. Aguardo seu retorno.   Abraços Att Luiz Maia
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar