Duvida DataGridView C#

[quote=Rodrigo1895]No DataGridView a coluna existe, ela é a coluna do codproduto…
Mas eu tenho que criar a coluna nesse objeto row também?Como?
[/quote]

Bom, ela existe, então eliminamos essa possibilidade pode ser eliminada.
Olha só, fiz um exemplo para você tirar uma ideia. Talvez você consiga solucionar seu problema aqui. Baixa o arquivo anexo e dê uma olhada.
Qualquer coisa, só postar aqui.

Abração,
e fique com Deus! :smiley:

O que eu estou fazendo é para Desktop, não estou fazendo para web…[/quote]
O tal template que a MayogaX está dizendo é você definir as colunas de sua GridView com DataMembers (no caso do Desktop) iguais às propriedades a serem exibidas e TemplateFields dentro das colunas (no caso de ASP.NET WebForms).

[quote=Nicolas Fernandes][quote=Rodrigo1895]No DataGridView a coluna existe, ela é a coluna do codproduto…
Mas eu tenho que criar a coluna nesse objeto row também?Como?
[/quote]

Bom, ela existe, então eliminamos essa possibilidade pode ser eliminada.
Olha só, fiz um exemplo para você tirar uma ideia. Talvez você consiga solucionar seu problema aqui. Baixa o arquivo anexo e dê uma olhada.
Qualquer coisa, só postar aqui.

Abração,
e fique com Deus! :D[/quote]

Muito obrigado pelo exemplo…
Esse exemplo que você fez, você pegou a linha selecionada inteira e passou para o outro DataGridView.
Como pegar uma determinada coluna eu ja consegui, mas o que eu não estou conseguindo, é passar essa coluna para o outro DataGridView em uma determinada coluna, e nao para a linha inteira.
E quando eu for passar, pode ser que ja tenha algo listado no DataGridView, então eu tenho que fazer com que ele insira na proxima linha…

Olha em Delphi eu consegui fazer a mesma coisa que eu quero fazer em C#, olha como ficou o código:

procedure TForm2.DBGrid1CellClick(Column: TColumn); begin Unit1.Form1.zquery1.open; Unit1.Form1.zquery1.Insert; Unit1.Form1.zquery1.fieldbyname('codproduto').asstring := zquery1.FieldByName('codproduto').AsString; end;

Em Delphi em vez de mim passar o valor pelo DBGrid eu passei pelo ZQuery que faz a conexao com o DBGrig.
Delphi ficou bem simples… mas em C# não estou conseguindo

Nesse caso, tente da seguinte maneira:

  1. Pegue a linha selecionada e, nela, procure qual a coluna você quer pegar o valor;
  2. Na gridview que receberá o valor, procure a célula (linha/coluna) que você quer inserir esse valor copiado, acesse a propriedade Value e seja feliz.

Com esse exemplo, acho que você já pode ter uma ideia do que é e tentar desbravar o resto do problema!

[quote=Nicolas Fernandes]Nesse caso, tente da seguinte maneira:

  1. Pegue a linha selecionada e, nela, procure qual a coluna você quer pegar o valor;
  2. Na gridview que receberá o valor, procure a célula (linha/coluna) que você quer inserir esse valor copiado, acesse a propriedade Value e seja feliz.[/quote]

Fiz o seguinte:

[code]
// peguei o valor
string codigo = estoqueDataGridView.CurrentRow.Cells[“colunacodproduto”].Value.ToString();

// inseri no GridView
Form1 form = new Form1();
form.compras_detalhesDataGridView.Rows[0].Cells[“colunacodproduto”].Value = codigo.ToString();[/code]

Mas deu um erro:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

Uma outra duvida que eu tenho.
Nesses:
Row[]
Cell[]
Eu passo um nome, ou um índice em número?

Não consegui cara… :confused:

[code] // peguei o valor
string codigo = estoqueDataGridView.CurrentRow.Cells[“colunacodproduto”].Value.ToString();

// inseri no GridView  
            Form1 form = new Form1();  
            form.compras_detalhesDataGridView.Rows[0].Cells["colunacodproduto"].Value = codigo.ToString();  [/code]

O que tem de errado nesse código?
Está dando erro na hora de inserir o valor

Ao que parece, você não possue nenhuma linha na tabela do seu form, e quer adicionar na linha 0. Por isso dá essa exception. Adicione uma linha lá, por padrão, e faça o mesmo teste, por favor.

Entao, no caso eu coloquei na linha 0 só para saber se ia dar certo…
Mas no final, as vezes no GridView que será inseridoo valor ja vai ter algumaslinhas com valores, ai eu teria que inserir na proxima linha da ultima existente, ai no lugar do 0 eu coloco o que para ele inserir na proxima linha?

Entao, no caso eu coloquei na linha 0 só para saber se ia dar certo…
Mas no final, as vezes no GridView que será inseridoo valor ja vai ter algumaslinhas com valores, ai eu teria que inserir na proxima linha da ultima existente, ai no lugar do 0 eu coloco o que para ele inserir na proxima linha?[/quote]
Para inserir na última linha, você pode usar o Count da propriedade Rows daquela GridView.

Fiz assim:

[code]// peguei o valor
string codigo = estoqueDataGridView.CurrentRow.Cells[“colunacodproduto”].Value.ToString();

        // inseri no GridView    
        Form1 form = new Form1();
        int cont = form.compras_detalhesDataGridView.Rows.Count;
        form.compras_detalhesDataGridView.Rows[cont].Cells["colunacodproduto"].Value = codigo.ToString();[/code]

Deu o mesmo erro que antes.

Form1 form = new Form1(); int cont = form.compras_detalhesDataGridView.Rows.Count; form.compras_detalhesDataGridView.Rows[cont].Cells["colunacodproduto"].Value = codigo.ToString();

Quando eu coloco esse código para inserir uma nova linha está correto??
Não teria um outro método para inserir uma nova linha e especificar a coluna que quer preencher com os dados?

[quote=Rodrigo1895] Form1 form = new Form1(); int cont = form.compras_detalhesDataGridView.Rows.Count; form.compras_detalhesDataGridView.Rows[cont].Cells["colunacodproduto"].Value = codigo.ToString();

Quando eu coloco esse código para inserir uma nova linha está correto??
Não teria um outro método para inserir uma nova linha e especificar a coluna que quer preencher com os dados?[/quote]

Você deve especificar cont - 1 ao invés de só o valor do contador, pois o índice de uma matriz começa em 0. Logo, se você tem 10 linhas na matriz, os índices vão de 0 a 9, entendeu?
Como já disse:

Para inserir linha:DataGridViewRow row = new DataGridViewRow(); //Trabalha na linha grid.Rows.Add(row);
Para especificar os dados de uma coluna:DataGridViewRow row = new DataGridViewRow(); row["ColunaQueVoceQuer"].Value = "Teste"; //ou row[1].Value = "Teste";

[code] string codigo = estoqueDataGridView.CurrentRow.Cells[“colunacodproduto”].Value.ToString();

        DataGridViewRow row = new DataGridViewRow();
        row[2].Value = codigo;

        Form1 form = new Form1();
        form.compras_detalhesDataGridView.Rows.Add(row);[/code]

Fiz assim e continua com o erro:

Erro na linha:

Error 1 Cannot apply indexing with [] to an expression of type ‘System.Windows.Forms.DataGridViewRow’

[quote=Rodrigo1895]

Error 1 Cannot apply indexing with [] to an expression of type ‘System.Windows.Forms.DataGridViewRow’[/quote]

Você deve acessar a célula da linha através da propriedade Cells, e não desse modo que você está fazendo.
O compilador acusou o erro; logo, é só você ler o que tá escrito e tentar desvendar.

Entao,agora eu fiz assim:

[code] string codigo = estoqueDataGridView.CurrentRow.Cells[“colunacodproduto”].Value.ToString();

        DataGridViewRow row = new DataGridViewRow();
        row.Cells[2].Value = codigo;

        Form1 form = new Form1();
        form.compras_detalhesDataGridView.Rows.Add(row);[/code]

Aparentemente não ocorre nenhum erro, é compilado normalmente sem nenhum erro…
Mas quando eu seleciono a linha desejada no datagridview ocorre esse erro:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

O erro está na linha

Usa o debugger para conferir quantas células tem naquela linha, e daí você vê o porquê de não estar achando a célula 2.

Entao, eu fiz o debugg, e lá fala que não tem nenhuma célula…
Mas como que não tem nenhuma célula se meu DataGridView tem as células?

Depende. Você tá selecionando a linha da GridView correta? Confere esses pequenos detalhes, pois o erro está aí.

Estou sim…
Coloco o debugger na linha que está dando o erro…