Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ted k'

[Resolvido] Erro de funções em C#

Recommended Posts

Preciso de uma ajuda galera...

 

tenho essa class aqui, as importações "using" não são problemas, resumi o codigo aqui:

 

using System;
using System.Data;
using System.Data.Odbc;
using System.Configuration;
using FuncoesGerais;

public partial class Listar : System.Web.UI.Page{

	// Criando objetos de Funções.
	Funcoes fn = new Funcoes();
	string sql;

	// Usando o Page_Load para exibir dados diretamente na página.
	protected void Page_Load(object sender, System.EventArgs e){
		BindGrid();
	}

	// DataGrid da página Listar.aspx.
	public void BindGrid(){
		DataSet ds = new DataSet();
		OdbcConnection conn = new OdbcConnection(fn.parteConexao());
		OdbcDataAdapter adapter = new OdbcDataAdapter("SELECT * FROM material_apoio WHERE empreendimento = '" + Convert.ToString(Session["empreendimento"]) + "'", conn);

		adapter.Fill(ds, "material_apoio");
		MyDataGrid.DataSource = ds.Tables[0].DefaultView;
		MyDataGrid.DataBind();
	}

	// Passando a paginação.
	public void myDataGrid_Page(object sender, System.Web.UI.WebControls.DataGridPageChangedEventArgs e){
		MyDataGrid.CurrentPageIndex = e.NewPageIndex;
		BindGrid();
	}

	// Procurando a Categoria quando está listando.
	public void LocalizarCategoria(string codigoCategoria){

		// Abrindo a Conexão para os SQL's.
		OdbcConnection conn = new OdbcConnection(fn.parteConexao());
		conn.Open();

		try {
			sql = "SELECT nome FROM material_apoio_categoria WHERE codigo = '" + Convert.ToInt32(codigoCategoria) + "' AND empreendimento = '" + Convert.ToString(Session["empreendimento"]) + "'";
			OdbcCommand comando = new OdbcCommand(sql, conn);
			OdbcDataReader rs = comando.ExecuteReader();

			if (rs.HasRows){
				Response.Write(rs["nome"].ToString());
			}
			conn.Close();
		}
		catch {
			Response.Write(fn.alert("Ocorreu um Erro em Categorias.", "../Default.aspx"));
		}
	}
}

na pagina default.aspx tenho isso:

<%@ Page Language="C#" AutoEventWireup="True" CodeFile="class/Listar.aspx.cs" Inherits="Listar" %>
<%@ Assembly Src="../class/Funcoes.cs" %>
<form runat="server">
<asp:DataGrid runat="server"
						  id="MyDataGrid" Width="720px"
						  PageSize="30" AllowPaging="True"
						  AlternatingItemStyle-BackColor="#F3F3F3"
						  AutoGenerateColumns="False"
						  BorderWidth="0" CellPadding="0" CellSpacing="2"
						BorderColor="#FFFFFF"
						  HeaderStyle-CssClass="classFonte05"
						  HeaderStyle-BackColor="#E8E8E8"
						  HeaderStyle-HorizontalAlign="Center"
						HeaderStyle-Font-Bold="True"
						  HeaderStyle-Height="25" ItemStyle-Height="22"
						  ItemStyle-CssClass="classFonte06"
						  ItemStyle-HorizontalAlign="Center"
						OnPageIndexChanged="myDataGrid_Page">

					  <columns>
						 <asp:TemplateColumn>
							<HeaderTemplate><div style="width: 70px;">DATA</div></HeaderTemplate>
							<ItemTemplate><div style="width: 70px;" class="mousePointer" onclick="url('MaterialApoio.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "codigo") %>');"><%# string.Format("{0:dd/MM/yyyy}", DataBinder.Eval(Container.DataItem, "data_cadastro")) %></div></ItemTemplate>
						  </asp:TemplateColumn>
						  <asp:TemplateColumn>
							<HeaderTemplate><div style="width: 255px;">TÍTULO</div></HeaderTemplate>
							<ItemTemplate><div style="width: 255px;" class="mousePointer" onclick="url('MaterialApoio.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "codigo") %>');"><script language="javascript">ifVazio("<%# DataBinder.Eval(Container.DataItem, "titulo") %>");</script></div></ItemTemplate>
						  </asp:TemplateColumn>
						  <asp:TemplateColumn>
							<HeaderTemplate><div style="width: 234px;">CATEGORIA</div></HeaderTemplate>
							<ItemTemplate><div style="width: 234px;" class="mousePointer" onclick="url('MaterialApoio.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "codigo") %>');"><script language="javascript">ifVazio("<%# LocalizarCategoria(DataBinder.Eval(Container.DataItem,"categoria")) %>");</script></div></ItemTemplate>
						  </asp:TemplateColumn>
						  <asp:TemplateColumn>
							<HeaderTemplate><div style="width: 93px;">STATUS</div></HeaderTemplate>
							<ItemTemplate><div style="width: 93px;" class="mousePointer" onclick="url('MaterialApoio.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "codigo") %>');"><script language="javascript">ifVazio("<%# DataBinder.Eval(Container.DataItem, "estatus") %>");</script></div></ItemTemplate>
						  </asp:TemplateColumn>
						  <asp:TemplateColumn>
							<HeaderTemplate><div style="width: 33px;">DEL</div></HeaderTemplate>
							<ItemTemplate><input type="checkbox" name="codigo" id="codigo" value="<%# DataBinder.Eval(Container.DataItem, "codigo") %>" /></ItemTemplate>
						  </asp:TemplateColumn>
					  </columns>
					  
					  <pagerstyle Height="50" HorizontalAlign="Center" CssClass="classPaginacao" Mode="NumericPages" />
					  </asp:DataGrid>
</form>

está gerando esse erro aqui:

 

Descrição: Erro ao compilar um recurso necessário para atender esta solicitação. Examine os detalhes específicos do erro e modifique o código fonte apropriadamente.

 

Mensagem de Erro do Compilador: CS1502: Melhor método sobrecarregado compatível com 'Listar.LocalizarCategoria(string)' tem alguns argumentos inválidos

a linha que dar o erro é essa:

<ItemTemplate><div style="width: 234px;" class="mousePointer" onclick="url('MaterialApoio.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "codigo") %>');"><script language="javascript">ifVazio("<%# LocalizarCategoria(DataBinder.Eval(Container.DataItem,"categoria")) %>");</script></div></ItemTemplate>

galera do .net, eu desistir como posso resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Altere o código do procedimento abaixo para que o parâmetro seja do tipo Object ao invés de String:

 

public void LocalizarCategoria(string codigoCategoria)

Passaria a:

 

public void LocalizarCategoria(object codigoCategoria)

Compartilhar este post


Link para o post
Compartilhar em outros sites

troquei e deu esse erro:

Mensagem de Erro do Compilador: CS1502: Melhor método sobrecarregado compatível com 'System.Convert.ToString(object, System.IFormatProvider)' tem alguns argumentos inválidos

na mesma linha!

 

quando eu troco essa linha:

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

por essa:

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

aparece o numero da categoria, só que eu quer é com o numero da categoria chamar o nome dela com essa função que criei

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se estiver acontecendo o que eu estou pensando e aconteceu comigo esses dias, seu parâmetro de entrada terá que ser object e dentro do método você deve extrair a propriedade ToString, lógico que isso não é a forma mais adequada, mas tive esse problema quando user um Repeater, e a única forma foi criando o parâmetro de entrada como object. Faça o teste.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui:

// Procurando a Categoria quando está listando.
public void LocalizarCategoria(string codigoCategoria){}

Tente:

// Procurando a Categoria quando está listando.
public void LocalizarCategoria(object codigoCategoria){}

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente mudar seu metodo LocalizarCategoria para retornar string ao inves de void. Dentro dele, ao inves de dar Response.Write use return.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nada man:

 

erro:

Mensagem de Erro do Compilador: CS0161: 'Listar.LocalizarCategoria(object)': nem todos os caminhos de código retornam um valor

linha:

public string LocalizarCategoria(object codigoCategoria){

troquei para object, string, int, nada man!! tá ruim pra mim!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ted,

 

Faça um teste da seguinte forma:

 

<ItemTemplate><div style="width: 234px;" class="mousePointer" onclick="url('MaterialApoio.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "codigo") %>');"><script language="javascript">ifVazio("<%# LocalizarCategoria((String)DataBinder.Eval(Container.DataItem,"categoria")) %>");</script></div></ItemTemplate>

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse erro:

Mensagem de Erro do Compilador: CS0161: 'Listar.LocalizarCategoria(object)': nem todos os caminhos de código retornam um valor

linha:

public string LocalizarCategoria(object codigoCategoria){

olha como está:

 

public string LocalizarCategoria(object codigoCategoria){
		// Abrindo a Conexão para os SQL's.
		OdbcConnection conn = new OdbcConnection(fn.parteConexao());
		conn.Open();

		sql = "SELECT nome FROM material_apoio_categoria WHERE codigo = '" + Convert.ToInt32(codigoCategoria) + "' AND empreendimento = '" + Convert.ToString(Session["empreendimento"]) + "'";
		OdbcCommand comando = new OdbcCommand(sql, conn);
		OdbcDataReader rs = comando.ExecuteReader();

		if (rs.HasRows){
			return rs["nome"].ToString();
		}
		conn.Close();
	}

lembrando que a função está dentro de uma classe, como citei no primeiro post

Compartilhar este post


Link para o post
Compartilhar em outros sites

erro:

Detalhes da Exceção: System.InvalidOperationException: Não existem dados para a linha ou coluna.

linha:

return rs["nome"].ToString();

Compartilhar este post


Link para o post
Compartilhar em outros sites

erro:

Mensagem de Erro do Compilador: CS0161: 'Listar.LocalizarCategoria(object)': nem todos os caminhos de código retornam um valor

codigo do erro:

public string LocalizarCategoria(object codigoCategoria){

man, e está passando valor!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos lá.

 

se eu deixar assim:

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

 

ele me retornar o ID da categoria, que é "26", quando eu coloco o nome da função, gera os erros.

 

a função está assim:

public string LocalizarCategoria(object codigoCategoria){
		// Abrindo a Conexão para os SQL's.
		OdbcConnection conn = new OdbcConnection(fn.parteConexao());
		conn.Open();

		sql = "SELECT nome FROM material_apoio_categoria WHERE codigo = '" + Convert.ToInt32(codigoCategoria) + "' AND empreendimento = '" + Convert.ToString(Session["empreendimento"]) + "'";
		OdbcCommand comando = new OdbcCommand(sql, conn);
		OdbcDataReader rs = comando.ExecuteReader();

		if (rs.Read()){
			return rs["nome"].ToString();
		}
		conn.Close();
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo, sua funcao retorna uma string, certo?

Mas so existe um lugar no seu metodo que voce usa o return, e este return esta dentro de um bloco condicional if.

Sua funcao so vai retornar um valor quando ele entrar no if. O que acontece se ele nao entrar no IF? Nao vai retornar nada, ai da erro!

Sua logica pode ser alterada para isso:

if (rs.Read()){
			return rs["nome"].ToString();
		}
else
return string.Empty;
Se nao achar nada no SELECT, retorna uma string vazia. Ou voce poderia dar fazer assim:

return "Categoria nao cadastrada"
.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.