Ir para conteúdo
Fórum Script Brasil
  • 0

Asp.net E C Jogo Da Velha


kuroi

Pergunta

hj é o primero dia da vida que programa em c# e está foda.

porque não consigo usar a variavel campo??

        private void btSubmit_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            string campo;
            int i;
            //OleDbConnection ConnSQL = Conn.Conexao();

            for (i=1; i<29; i++)
            {
                campo = campo + ("this.T8C" + i);
            }
            Response.Write(campo);
                }
[/code] quando compilo ele diz "Use of unassigned local variable 'campo'" nessa linha: campo = campo + ("this.T8C" + i); se eu comento essa linha, ele da erro no Response.Write. agora se por exemplo, eu comento essa linha e ponho
[code]Response.Write(i);
em vez de
Response.Write(campo);

ele mostra 29 certinho. porque isso??

outra coisa, como faco pra pegar um campo pelo nome em uma string??

exemplo, tenho 29 textbox, cada um com nome T8C1, T8C2... ate T8C29.

por isso vou formar a string ("this.T8C" + i) e quero pegar o valor do campo. me disseram que, acho que em java (ou outra linguagem), existe o comando eval que faz isso. e que o C# tem um comando semelhante, so tenho que descobrir qual é, alguém sabe?

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

quando compilo ele diz "Use of unassigned local variable 'campo'" nessa linha:

A solução é realmente a que a Andréia propôs. Mas, explicando, a mensagem de erro diz: "Use de variável local sem valor atribuído". Existem tipos que são valores (como int) e existem tipos que são referências (como string). Para todas as referências você precisa definir o objeto, do contrário o haverá um valor nulo (null).

outra coisa, como faco pra pegar um campo pelo nome em uma string??

exemplo, tenho 29 textbox, cada um com nome T8C1, T8C2... ate T8C29.

por isso vou formar a string ("this.T8C" + i) e quero pegar o valor do campo. me disseram que, acho que em java (ou outra linguagem), existe o comando eval que faz isso. e que o C# tem um comando semelhante, so tenho que descobrir qual é, alguém sabe?

Você poderia fazer isso assim:

string valor = "";

foreach (Control c in this.Controls)
{
    if (c.Name.StartsWith("T8C"))    
        valor += c.Text;
}
MessageBox.Show(valor);

Outra alternativa seria usar Reflection.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

valeu andreia, valeu graymalkin, mas essa variavel c declarada como Control não tem a propriedade Name, muito menos a propriedade Text. tentei pela propriedade ID, mas não da certo, ele sempre volta ID em branco. fora que ele so conta 3 Controls, eu tenho 28.

esse reflection serve pra criar objetos COM (tipo um ADODB.RecordSet) no runtime, certo?? no que ele pode me ajudar aqui??

Link para o comentário
Compartilhar em outros sites

  • 0

valeu andreia, valeu graymalkin, mas essa variavel c declarada como Control não tem a propriedade Name, muito menos a propriedade Text. tentei pela propriedade ID, mas não da certo, ele sempre volta ID em branco. fora que ele so conta 3 Controls, eu tenho 28.

Estranho... aqui funcionou. Mas, você pode usar o operador as para fazer um cast para o tipo desejado (no caso, uma TextBox). Desta maneira vai existir a propriedade Text.

esse reflection serve pra criar objetos COM (tipo um ADODB.RecordSet) no runtime, certo?? no que ele pode me ajudar aqui??

Reflection serve para "investigar" tipos em tempo de execução. No caso, o investigar aqui refere-se a poder examinar nomes e valores de propriedades e/ou campos e também de invocar métodos. No caso, cada textbox declarada no seu form é um objeto contido no mesmo. Investigando os objetos que compõem o form você poderia alcançar o que você quer. Posso tentar fazer um exemplo disso para você, é só me lembrar no final de semana (que é quando eu tenho mais tempo).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

estranho que não tenha funcionado, talvez seja a versao, to usando o 2003. como eu disse, ele sempre volta 3 Controls. acredito que os TextBox estejam entre os WebControls do System.Web.UI, mas não consegui acessar essa colecao.

mas já consegui aqui de otro jeito, vi que ele pega o Request.Form, ai ficou assim:

            for (int i = 1; i <= 28; i++)
            {
                sql = sql + this.Request.Form["T8C" + i.ToString()].ToString() + ",";
            }[/code] quanto a esse negocio do reflection, não precisa fazer um exemplo td bunitinho, mas queria saber mais o menos como é a sintaxe dele, posta aí quando tiver tempo, beleza?? valeu aí EDITADO: lembrei agora que vou precisar mostrar os dados na tela. tipo esse que eu fiz era pra montar o insert. agora na outra pagina tenho que mostrar tdos os dados do banco. pra isso vou preencher os objetos <asp: label> que estao na minha pagina. e preencher um por um vai ser foda. tipo nesse caso são so 28 campos, mas eu tenho 11 formularios com media de uns 70 campos cada um e não quero preencher um por um. posso pegar do datareader num for igual esse que eu fiz, mas pra pegar os labels no for, volto pro mesmo problema de antes, alguém tem mais alguma ideia?? EDITADO DE NOVO: esse do label deu certo:
[code]            foreach (Control c in this.Controls)
            {
                if (c.GetType()==this.T8C1.GetType())
                {
                    Label l = c as Label;
                    l.Text = rs[l.ID.ToString()].ToString();
                }
            }

porque sera que ele encontrou os labels mas não encontrou os textbox?

EDITADO MAIS UMA VEZ:

acho que entendi porque não achou os textbox, eu que fui muito burro. é porque foi depois de postar a pagina. então ele ainda nem tinha carregado de novo a pagina, então ainda não existia nenhum textbox. é que eu não sabia que a pagina estava sendo postada no clique do image, mas era obvio que ele iria postar.

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...