Fórum Dúvidas sobre manipulação de dados no GRIDVIEW e conexão com o Firebird #4196

31/03/2009

0

Bom Dia Professor!

           Estou com algumas dúvidas sobre manipulação de dados no GRIDVIEW e conexão com o Firebird, descritas abaixo:



1 - Ao criar um DATAGRID, alterando o nome da coluna "0"(zero) para DOWNLOAD, e a segunda coluna tenho a lista dos arquivos do conteúdo de um site, posso fazer o download, clicando na coluna "0"(zero).   Dúvida : Acontece que possuo o DELPHI 2007 e desejaria saber Como fazer o mesmo que fiz no DATAGRID(Código abaixo) no DBGRIDVIEW, visto que ocorre erro na linha marcada de vermelho abaixo ?   procedure TDefault.Grid_Lista_Arquivos_ItemCommand(source: System.Object; e: System.Web.UI.WebControls.DataGridCommandEventArgs);
Var
fn : String ;
begin
 if (e.CommandName='Download') then
      begin
      // Path + Arquivo da Coluna
      fn:= E.Item.Cells[1].Text ;
      //
      // Tipo do CONTEÚDO que irá enviar para o BROWSER
      Response.ContentType := 'application./x-download';
      //
      // Cabeçalho do RESPONSE que irá enviar o nome do arquivo que
      // será enviado ao browser
      Response.AddHeader('Content-Disposition','filename='+
      Path.GetFileName(fn)); //Path.GetFileName(fn) => Extrai o nome do arquivo
      //
      // Caso queira já ABRIR o arquivo no BROWSER, após o DOWNLOAD
      Response.WriteFile(fn);
      Response.&End;
 end;
end;   2 - Estou conseguindo conectar NORMALMENTE no FIREBIRD2.1 e no INTERBASE2007, escolhendo SQLDATASOURCE e DBEXPRESS. Somente não funcionam os parâmetros do GRIDVIEW, em NENHUM DOS 2.   Dúvida : Através da linha marcada AZUL abaixo, consigo com um FBDataReader recuperar o valor de um registro filtrado no select em vermelho .   Como fazer o mesmo no SQLDataSource, único objeto que consegui conectar perfeitamente no FIREBIRD 2.1 e INTERBASE 2007 ?
procedure TDefault.BtIncluir_Click(sender: System.Object; e: System.EventArgs);
Var
FbDataReader_Select :  FBDataReader;
Qtde_Reg_JahExiste  : LongInt;
begin
   FbConnection1.Open;      FbCommand1.CommandText :=
    'select count(*) From COUNTRY '+
    'where Upper(COUNTRY)='+ QuotedStr(  Uppercase(TxtCOUNTRY_Incluir.Text)  ) ;      // As 2 linhas abaixo "ABREM" a query;
   FbDataReader_Select:=    FbCommand1.ExecuteReader();
   FbDataReader_Select.Read;      // Dv := SqlDataSource1.Select(DataSourceSelectArguments.Empty);      // Armazena a qtde de registros que já existe,
   // com a MESMA chave primária que tenta INCLUIR
   Qtde_Reg_JahExiste := StrToInt( FbDataReader_Select.GetValue(0).ToString );
   FbConnection1.Close;      // Se o REGISTRO já existir, EMITE MENSAGEM :
   if Qtde_Reg_JahExiste=1 then
   Begin
       Lb_Mensagem.Text := 'Registro já EXISTENTE !';
       Lb_Mensagem.Visible := True;
     TxtCOUNTRY_Incluir.Focus;
      Exit;
   End;      SqlDatasource1.InsertCommand  :=
   'Insert into COUNTRY(COUNTRY,CURRENCY) '+
   'VALUES ('+QuotedStr(TxtCOUNTRY_Incluir.Text) +
   ','+QuotedStr(TxtCURRENCY_Incluir.Text)+')';      SqlDatasource1.Insert;      FiltrarPor( TxtCOUNTRY_Incluir.Text, SqlDatasource1 ) ;
  
   GridView1.SelectedIndex := -1;
   Lb_Mensagem.Text := '';
   Lb_Mensagem.Visible := False;      TxtCOUNTRY_Incluir.Focus
end;
Certo de Vossa Atenção, desde já agradeço!

Ferreira & Souza Informática # Sede => Guaxupé - MG .
CNPJ: 05.258.001/0001-54
Muzambinho :
carlosmuzambinho@yahoo.com.br
Analista de Sistemas / Assistência Técnica
CRA : AS.26.029
Cel: 35- 8831-9915
Rogério Souza

Rogério Souza

Responder

Posts

31/03/2009

Devmedia

Rogério,
por se tratar de dúvidas distintas, peço que abra um chamado para cada uma. Escolha a dúvida que deseja tratar nesse chamado e abra um novo chamado para a outra, ok!
Responder

Gostei + 0

31/03/2009

Rogério Souza

Bom Dia Professor!

           Estou com uma dúvida sobre manipulação de dados no GRIDVIEW, descrita abaixo:



1 - Ao criar um DATAGRID, alterando o nome da coluna "0"(zero) para DOWNLOAD, e a segunda coluna tenho a lista dos arquivos do conteúdo de um site, posso fazer o download, clicando na coluna "0"(zero).   Dúvida : Acontece que possuo o DELPHI 2007 e desejaria saber Como fazer o mesmo que fiz no DATAGRID(Código abaixo) no DBGRIDVIEW, visto que ocorre erro na linha marcada de vermelho abaixo ?   procedure TDefault.Grid_Lista_Arquivos_ItemCommand(source: System.Object; e: System.Web.UI.WebControls.DataGridCommandEventArgs);
Var
fn : String ;
begin
 if (e.CommandName='Download') then
      begin
      // Path + Arquivo da Coluna
      fn:= E.Item.Cells[1].Text ;
      //
      // Tipo do CONTEÚDO que irá enviar para o BROWSER
      Response.ContentType := 'application./x-download';
      //
      // Cabeçalho do RESPONSE que irá enviar o nome do arquivo que
      // será enviado ao browser
      Response.AddHeader('Content-Disposition','filename='+
      Path.GetFileName(fn)); //Path.GetFileName(fn) => Extrai o nome do arquivo
      //
      // Caso queira já ABRIR o arquivo no BROWSER, após o DOWNLOAD
      Response.WriteFile(fn);
      Response.&End;
 end;
end;
Responder

Gostei + 0

31/03/2009

Rodrigo Mourão

Olá Rogério !!   Bem trocar o DataGrid pelo Gridview foi, na minha opinião, a melhor coisa que você poderia ter feito. Para mim é o melhor componente .net.   Bem mas acredito que o evento escolhido por você não foi o mellhor. Experimente o evento RowDataBound e para pegar o conetudo como você deseja faça algo como:     Var
fn : String ;
begin
 if e.Row.RowType = DataColunmRowType.DataItem then
      begin
      // Path + Arquivo da Coluna
      fn:= e.Cells[x]. ;
      //
      // Tipo do CONTEÚDO que irá enviar para o BROWSER
      Response.ContentType := 'application./x-download';
      //
      // Cabeçalho do RESPONSE que irá enviar o nome do arquivo que
      // será enviado ao browser
      Response.AddHeader('Content-Disposition','filename='+
      Path.GetFileName(fn)); //Path.GetFileName(fn) => Extrai o nome do arquivo
      //
      // Caso queira já ABRIR o arquivo no BROWSER, após o DOWNLOAD
      Response.WriteFile(fn);
      Response.&End;
 end;
Isso deve resolver seu problema.   Abs !!!   Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

31/03/2009

Rogério Souza

Fiz conforme pediu,
no evento ROWDATABOUND
do GRIDVIEW,
inseri o código ABAIXO, e deu
erro LOGO no COMEÇO : DataColumnRowType
ONDE MARQUEI EM NEGRITO LOGO ABAIXO.

Que faço agora ?

procedure TDefault.GridView_ListaArquivos_RowDataBound(sender: System.Object;
    e: System.Web.UI.WebControls.GridViewRowEventArgs);
begin
       if e.Row.RowType = DataColumnRowType.DataItem then
      begin
      // Path + Arquivo da Coluna
      fn:= e.Cells[x]. ;
      //
      // Tipo do CONTEÚDO que irá enviar para o BROWSER
      Response.ContentType := 'application./x-download';
      //
      // Cabeçalho do RESPONSE que irá enviar o nome do arquivo que
      // será enviado ao browser
      Response.AddHeader('Content-Disposition','filename='+
      Path.GetFileName(fn)); //Path.GetFileName(fn) => Extrai o nome do arquivo
      //
      // Caso queira já ABRIR o arquivo no BROWSER, após o DOWNLOAD
      Response.WriteFile(fn);
      Response.&End;
end;
Responder

Gostei + 0

31/03/2009

Rogério Souza

Olá,
obrigado pela ajuda ... porém ainda não deu certo ...
Vou tentar ser mais CLARO :

No projeto contém um DATAGRID que mostra um BUTTON com DOWNLOAD
na PRIMEIRA COLUNA e na segunda o CAMINHO+ARQUIVO para DOWNLOAD.

Ao clicar em DOWNLOAD - PRIMEIRA COLUNA,
faz o DOWNLOAD do CAMINHO+ARQUIVO da SEGUNDA COLUNA

o Download, pelo evento do DATAGRID, conforme ABAIXO , funciona :

procedure TDefault.Grid_Lista_Arquivos_ItemCommand(source: System.Object; e: System.Web.UI.WebControls.DataGridCommandEventArgs);
Var
fn : String ;
begin
    if (e.CommandName='Download') then
   begin
       // Path + Arquivo da Coluna
      fn:= E.Item.Cells[1].Text ;
      //
      // Tipo do CONTEÚDO que irá enviar para o BROWSER
      Response.ContentType := 'application./x-download';
      //
      // Cabeçalho do RESPONSE que irá enviar o nome do arquivo que
      // será enviado ao browser
      Response.AddHeader('Content-Disposition','filename='+
      Path.GetFileName(fn)); //Path.GetFileName(fn) => Extrai o nome do arquivo
      //
      // Caso queira já ABRIR o arquivo no BROWSER, após o DOWNLOAD
      Response.WriteFile(fn);
      Response.&End;
    end;
end;


no GRIDVIEW, o ÚNICO local que deu erro, no evento
ROWCOMMAND, foi onde está em VERMELHO ABAIXO.

Tentei seguir o que falou, não compila ...

Comprende, a PROPRIEDADE Item de "E",
parâmetro passado pelo EVENTO ROWCOMMAND, não existe
para o OBJETO do tipo GRIDVIEW ???

Como recupero, neste caso, a COLUNA desejada que o usuário
CLICOU no GRIDVIEW ?
( no DATAGRID foi FÁCIL, porém dizem que está obsoleto )

procedure TDefault.GridView_ListaArquivos_RowCommand(sender: System.Object; e: System.Web.UI.WebControls.GridViewCommandEventArgs);
Var
fn : String ;

begin
     if (e.CommandName='Download') then
   begin
      // Path + Arquivo da Coluna
      fn:=  E.Item.Cells[1].Text ;

      //    LbMensa.Visible := True;
     // LbMensa.Text := Path.GetFileName(fn);
      //
      // Tipo do CONTEÚDO que irá enviar para o BROWSER
      Response.ContentType := 'application./x-download';
      //
      // Cabeçalho do RESPONSE que irá enviar o nome do arquivo que
      // será enviado ao browser
      Response.AddHeader('Content-Disposition','filename='+
      Path.GetFileName(fn)); //Path.GetFileName(fn) => Extrai o nome do arquivo
      //
      // Caso queira já ABRIR o arquivo no BROWSER, após o DOWNLOAD
     // Response.WriteFile(fn);
      Response.&End;
    end;
end;

Responder

Gostei + 0

31/03/2009

Rodrigo Mourão

Olá Rogerio !!

Eu entendi perfeitamente o que quer, faço isso quase que em todos os sistemas que desenvolvo em Asp.net por este motivo lhe indiquei mudar de Evento.

O erro ocorre em E.Item.Cells[1].Text por que o argumento no evento RowCommand não possui essas propriedades, por isso que tem que ser feito no RowDataBound. Mas enfim você diz que ocorre erro na linha:
 if e.Row.RowType = DataColumnRowType.DataItem then 

Poderia me informar qual q mensagem de erro ??  Se prefirir, para que não venhamos ficar aqui trocando mensagem em vão, pode me enviar o projeto para que eu possa compilar, depurar e localizar o real motivo do erro.

Fico no aguardo !!!


Obs.: Você pode estar utilizando o disco virtual para enviar o projeto

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

31/03/2009

Rogério Souza

                    AS Fontes foram enviadas para o Disco Virtual com o nome Upload_Download_teste.zip. Explicações detalhadas no código.

No aguardo pela resposta...

Grato
Responder

Gostei + 0

01/04/2009

Rodrigo Mourão

Olá Rogerio, preciso do Link completo.

Não tenho acesso ao disco virtual so os clientes.

No aguardo !!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

01/04/2009

Rogério Souza

Como pego o link ?
Responder

Gostei + 0

01/04/2009

Rogério Souza

BOM DIA ...

Veja se é o link abaixo:

https://www.devmedia.com.br/imagens/discovirtual/176193/Upload_Download_Teste.zip

Se não for, me explica como pegar para te enviar, ok ?

GRATO ...

Responder

Gostei + 0

01/04/2009

Rodrigo Mourão

Olá Amigo, consegui baixar !

Peço por gentileza aguardar pois irei fazer os testes e lhe respondo o mais rápido possível !!

Abs !!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

02/04/2009

Rodrigo Mourão

Olá Amigo !!!

Bem analisando seu código aqui agora vejo o porque o codigo não funcionou e da maneira que está Tb não vai funcionar. Vou lhe explicar por que.

Voce esta fazendo um bind direto de um array e até ai tudo bem porem o metodo que lhe passei funcionaria se as colunas estivessem ja no GridView o que nao é o caso. Se fosse pegariamos o valor desta maneira:

if e.Row.RowType = DataControlRowType.DataRow then
begin
      fn := DataBinder.Eval(e.Row.DataItem, 'Path').ToString();
      Response.ContentType := 'application./x-download';
      Response.AddHeader('Content-Disposition','filename='+
      Path.GetFileName(fn));
      Response.WriteFile(fn);
      Response.&End;
end;

No seu caso isso nao vai funcionar. PAra usar o grid view teria que montá-lo dinamicamente o link. Assim seria possivel.

Abs !!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

02/04/2009

Rogério Souza

Vamos ser mais diretos, ok?
Você consegue fazer o que fiz,
 no DATAGRID, através do GRIDVIEW,
corrigindo o CÓDIGO que COMENTEI,
seja NESTE ou NOUTRO evento ?

Caso não consiga, favor passar para outro programador da DEVMEDIA.
ok ?


Extremamente grato,

CARLOS A.F.Silva
Analista de Sistemas
Professor Licenciado do INSTITUTO FEDERAL DE MUZAMBINHO
Responder

Gostei + 0

02/04/2009

Rodrigo Mourão

Não se trata de conseguir fazer ou não !! Se trata de fazer como você quer que seja feito !!!

DA maneira que você quer não há possibilidade seja em um ou outro eveto pois o argumento não fornece os dados necessários.

Como falei so montando os dados no Grid View !!! Estarei enviando o post para ser passado a outro programador !!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

Responder

Gostei + 0

02/04/2009

Rogério Souza

Ok,

Apenas desejo fazer algo SIMPLES no GRIDVIEW,
que consigo em um COMPONENTE MAIS ANTIGO como o DATAGRID.

Caso saiba como fazer, favor corrigir o código.
(o mesmo funciona PERFEITAMENTE no DATAGRID)


Creio que não terei que
TROCAR TODO O CÓDIGO, pois os dados estão abertos/CARREGADOS no
GRIDVIEW e no DATAGRID, de maneira IDÊNTICA.

Logicamente TEM COMO CONSULTAR cada CÉLULA do GRIDVIEW,
como consultei do DATAGRID.
É somente ISTO que desejo fazer ao CLICAR na LINHA DESEJADA. MAIS NADA.

Agradeço o ESFORÇO,
aguardo outro programador.

CARLOS A.F.Silva.
Analista de Sistemas - Desenvolvedor Delphi Win32
Professor do Instituto Federal de Muzambinho.
Sócio - Ferreira e Souza Informática.







Responder

Gostei + 0

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

Aceitar