[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.
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
[quote=Nicolas Fernandes]Nesse caso, tente da seguinte maneira:
Pegue a linha selecionada e, nela, procure qual a coluna você quer pegar o valor;
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?
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.
[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]
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";
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.
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