Fórum Dúvidas sobre manipulação de dados no GRIDVIEW e conexão com o Firebird #4196
31/03/2009
0
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
Curtir tópico
+ 0Posts
31/03/2009
Devmedia
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!
Gostei + 0
31/03/2009
Rogério Souza
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;
Gostei + 0
31/03/2009
Rodrigo Mourão
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
Gostei + 0
31/03/2009
Rogério Souza
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;
Gostei + 0
31/03/2009
Rogério Souza
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;
Gostei + 0
31/03/2009
Rodrigo Mourão
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
Gostei + 0
31/03/2009
Rogério Souza
No aguardo pela resposta...
Grato
Gostei + 0
01/04/2009
Rodrigo Mourão
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
Gostei + 0
01/04/2009
Rogério Souza
Gostei + 0
01/04/2009
Rogério Souza
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 ...
Gostei + 0
01/04/2009
Rodrigo Mourão
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
Gostei + 0
02/04/2009
Rodrigo Mourão
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
Gostei + 0
02/04/2009
Rogério Souza
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
Gostei + 0
02/04/2009
Rodrigo Mourão
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
Gostei + 0
02/04/2009
Rogério Souza
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)