Gravar Chave Estrangeira
Olá
Preciso de muita ajuda e isso depende da continuidade do meu projeto...
É referete a chave estrangeira, quando crio um webform os outros dados são prenchidos no bancode dados sem problemas mas como ´digo´ para ele pegar essa chave estrangeira que esta em outra tabela... e depois gravar.
Devo usar um masterdetail... algo parecido....
Me ajudem.... :?:
Preciso de muita ajuda e isso depende da continuidade do meu projeto...
É referete a chave estrangeira, quando crio um webform os outros dados são prenchidos no bancode dados sem problemas mas como ´digo´ para ele pegar essa chave estrangeira que esta em outra tabela... e depois gravar.
Devo usar um masterdetail... algo parecido....
Me ajudem.... :?:
Andremfa
Curtidas 0
Respostas
Knight_of_wine
10/09/2007
Isso aqui deve te ajudar.
Nesse exemplo estou incluindo um empregado na tabela employee do Interbase, que contém quatro campos que são chave estrangeiras, mas eu só vou mostrar como incluir uma delas.
Primeiro você deve preencher o DropDownList, faça isso com um método mais ou menos assim.
O código do Command:
Assim deve ficar seu Page_Load
Depois coloque isso no seu insert:
Creio que isso deve resolver seu problema.
Nesse exemplo estou incluindo um empregado na tabela employee do Interbase, que contém quatro campos que são chave estrangeiras, mas eu só vou mostrar como incluir uma delas.
Primeiro você deve preencher o DropDownList, faça isso com um método mais ou menos assim.
procedure TWebForm1.atualizaComboDepart; begin Conn.Open; // Abra a Connetion try ddlDepartNo.DataValueField := ´DEPT_NO´; //Campo Chave da DropDownList existente na tabela department, este é o campo que será gravado na tabela Employee. ddlDepartNo.DataTextField := ´DEPARTMENT´; //Campo que vai aparecer o texto que existe na tabela department, para ficar mais amigável para o usuário selecionar. ddlDepartNo.DataSource := cmdDepartament.ExecuteReader; //Este command retorna o dado da tabela department. ddlDepartNo.DataBind; //Atualiza o DropDownList. finally Conn.Close; //Lembre-se de sempre fechar a conexão end; end;
O código do Command:
SELECT DEPT_NO, DEPARTMENT FROM DEPARTMENT
Assim deve ficar seu Page_Load
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs); begin // TODO: Put user code to initialize the page here if not IsPostBack then begin atualizaCombosDepart; //Chamando a procedure para preencher o DropDownList atualizaCombJob; end; end;
Depois coloque isso no seu insert:
procedure TWebForm1.setEmployee; begin Conn.Open; try try cmdInsEmployee.Parameters[´FIRST_NAME´].Value := txtFirstName.Text; cmdInsEmployee.Parameters[´LAST_NAME´].Value := txtLastName.Text; cmdInsEmployee.Parameters[´PHONE_EXT´].Value := txtPhoneExt.Text; cmdInsEmployee.Parameters[´HIRE_DATE´].Value := Convert.ToDateTime(txtHireDate.Text); //Adicionando o código de departamento selecionado pelo usuário. cmdInsEmployee.Parameters[´DEPT_NO´].Value := ddlDepartNo.SelectedValue; cmdInsEmployee.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue; cmdInsEmployee.Parameters[´JOB_GRADE´].Value := ddlJobGrade.SelectedValue; cmdInsEmployee.Parameters[´JOB_COUNTRY´].Value := ddlCountry.SelectedValue; cmdInsEmployee.Parameters[´SALARY´].Value := Convert.ToDecimal(txtSalary.Text); cmdInsEmployee.ExecuteNonQuery; except on e:exception do lblExcept.Text := e.Message; end; finally Conn.Close; end; end;
Creio que isso deve resolver seu problema.
GOSTEI 0
Andremfa
10/09/2007
Isso aqui deve te ajudar.
Nesse exemplo estou incluindo um empregado na tabela employee do Interbase, que contém quatro campos que são chave estrangeiras, mas eu só vou mostrar como incluir uma delas.
Primeiro você deve preencher o DropDownList, faça isso com um método mais ou menos assim.
O código do Command:
Assim deve ficar seu Page_Load
Depois coloque isso no seu insert:
Creio que isso deve resolver seu problema.
procedure TWebForm1.atualizaComboDepart; begin Conn.Open; // Abra a Connetion try ddlDepartNo.DataValueField := ´DEPT_NO´; //Campo Chave da DropDownList existente na tabela department, este é o campo que será gravado na tabela Employee. ddlDepartNo.DataTextField := ´DEPARTMENT´; //Campo que vai aparecer o texto que existe na tabela department, para ficar mais amigável para o usuário selecionar. ddlDepartNo.DataSource := cmdDepartament.ExecuteReader; //Este command retorna o dado da tabela department. ddlDepartNo.DataBind; //Atualiza o DropDownList. finally Conn.Close; //Lembre-se de sempre fechar a conexão end; end;
SELECT DEPT_NO, DEPARTMENT FROM DEPARTMENT
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs); begin // TODO: Put user code to initialize the page here if not IsPostBack then begin atualizaCombosDepart; //Chamando a procedure para preencher o DropDownList atualizaCombJob; end; end;
procedure TWebForm1.setEmployee; begin Conn.Open; try try cmdInsEmployee.Parameters[´FIRST_NAME´].Value := txtFirstName.Text; cmdInsEmployee.Parameters[´LAST_NAME´].Value := txtLastName.Text; cmdInsEmployee.Parameters[´PHONE_EXT´].Value := txtPhoneExt.Text; cmdInsEmployee.Parameters[´HIRE_DATE´].Value := Convert.ToDateTime(txtHireDate.Text); //Adicionando o código de departamento selecionado pelo usuário. cmdInsEmployee.Parameters[´DEPT_NO´].Value := ddlDepartNo.SelectedValue; cmdInsEmployee.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue; cmdInsEmployee.Parameters[´JOB_GRADE´].Value := ddlJobGrade.SelectedValue; cmdInsEmployee.Parameters[´JOB_COUNTRY´].Value := ddlCountry.SelectedValue; cmdInsEmployee.Parameters[´SALARY´].Value := Convert.ToDecimal(txtSalary.Text); cmdInsEmployee.ExecuteNonQuery; except on e:exception do lblExcept.Text := e.Message; end; finally Conn.Close; end; end;
Obrigado de extrema importancia esse topico
Vou implementar aqui...
GOSTEI 0
Andremfa
10/09/2007
[quote:f2bcce74e9=´Knight_of_Wine´]Isso aqui deve te ajudar.
Nesse exemplo estou incluindo um empregado na tabela employee do Interbase, que contém quatro campos que são chave estrangeiras, mas eu só vou mostrar como incluir uma delas.
Primeiro você deve preencher o DropDownList, faça isso com um método mais ou menos assim.
O código do Command:
Assim deve ficar seu Page_Load
Depois coloque isso no seu insert:
Creio que isso deve resolver seu problema.
procedure TWebForm1.atualizaComboDepart; begin Conn.Open; // Abra a Connetion try ddlDepartNo.DataValueField := ´DEPT_NO´; //Campo Chave da DropDownList existente na tabela department, este é o campo que será gravado na tabela Employee. ddlDepartNo.DataTextField := ´DEPARTMENT´; //Campo que vai aparecer o texto que existe na tabela department, para ficar mais amigável para o usuário selecionar. ddlDepartNo.DataSource := cmdDepartament.ExecuteReader; //Este command retorna o dado da tabela department. ddlDepartNo.DataBind; //Atualiza o DropDownList. finally Conn.Close; //Lembre-se de sempre fechar a conexão end; end;
SELECT DEPT_NO, DEPARTMENT FROM DEPARTMENT
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs); begin // TODO: Put user code to initialize the page here if not IsPostBack then begin atualizaCombosDepart; //Chamando a procedure para preencher o DropDownList atualizaCombJob; end; end;
procedure TWebForm1.setEmployee; begin Conn.Open; try try cmdInsEmployee.Parameters[´FIRST_NAME´].Value := txtFirstName.Text; cmdInsEmployee.Parameters[´LAST_NAME´].Value := txtLastName.Text; cmdInsEmployee.Parameters[´PHONE_EXT´].Value := txtPhoneExt.Text; cmdInsEmployee.Parameters[´HIRE_DATE´].Value := Convert.ToDateTime(txtHireDate.Text); //Adicionando o código de departamento selecionado pelo usuário. cmdInsEmployee.Parameters[´DEPT_NO´].Value := ddlDepartNo.SelectedValue; cmdInsEmployee.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue; cmdInsEmployee.Parameters[´JOB_GRADE´].Value := ddlJobGrade.SelectedValue; cmdInsEmployee.Parameters[´JOB_COUNTRY´].Value := ddlCountry.SelectedValue; cmdInsEmployee.Parameters[´SALARY´].Value := Convert.ToDecimal(txtSalary.Text); cmdInsEmployee.ExecuteNonQuery; except on e:exception do lblExcept.Text := e.Message; end; finally Conn.Close; end; end;
Obrigado de extrema importancia esse topico
Vou implementar aqui...[/quote:f2bcce74e9]
Até consegui fazer o problema é pegar as duas chaves mesmo...
porque não posso usar dois bdpcommand ele não entende isso.
Fica essa dúvida...
GOSTEI 0
Knight_of_wine
10/09/2007
Como é a estrutura da sua tabela?
GOSTEI 0
Andremfa
10/09/2007
Como é a estrutura da sua tabela?
Bom nao sei se entendi sua pergunta o que eu quero e pegar as chaves que tenho em uma tabela que sao duas, obviamente elas pertencem a outra tabela entao usei um bdpCommand que vocÊ mesmo disse:
[b:f5f5f3a12a]ddlDepartNo.DataSource := cmdDepartament.ExecuteReader; //Este command retorna o dado da tabela department[/b:f5f5f3a12a]
Ok cmdDepartament.ExecuteReader;
se eu fizer outro bdpcommand ele nao reconhece eu nao poderia fazer
ddlChave1.DataSource := cmdChave1.ExecuteReader;
ddlChave2.DataSource := cmdChave2.ExecuteReader;
Mas você nesse exemplo disse que conseguiu fazer com mais chaves e postou como fazer apenas com 1 chave. Acredito que saiba o que eu esteja falando....
GOSTEI 0
Knight_of_wine
10/09/2007
Agora entendi!
No meu caso eu usei um DDL para cada chave estrangeira.
Aí vai a seção implmentation da unit:
Na tabela employee tem três campos da tabela job como chave estrangeira que é JOB,JOB_GRADE e JOB_COUNTRY.
Eu linquei as DDLs de maneira que ao selecionar um JOB você só possa escolher o JOB_GRADE e JOB_COUNTRY baseado no job, tipo um master/detail.
Isso tá no evento SelectedIndexChanged da ddlJob.
No meu caso eu usei um DDL para cada chave estrangeira.
Aí vai a seção implmentation da unit:
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
begin
// TODO: Put user code to initialize the page here
if not IsPostBack then
begin
atualizaCombosDepart;
atualizaCombJob;
end;
end;
procedure TWebForm1.setEmployee;
begin
Conn.Open;
try
try
cmdInsEmployee.Parameters[´FIRST_NAME´].Value := txtFirstName.Text;
cmdInsEmployee.Parameters[´LAST_NAME´].Value := txtLastName.Text;
cmdInsEmployee.Parameters[´PHONE_EXT´].Value := txtPhoneExt.Text;
cmdInsEmployee.Parameters[´HIRE_DATE´].Value := Convert.ToDateTime(txtHireDate.Text);
cmdInsEmployee.Parameters[´DEPT_NO´].Value := ddlDepartNo.SelectedValue;
cmdInsEmployee.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue;
cmdInsEmployee.Parameters[´JOB_GRADE´].Value := ddlJobGrade.SelectedValue;
cmdInsEmployee.Parameters[´JOB_COUNTRY´].Value := ddlCountry.SelectedValue;
cmdInsEmployee.Parameters[´SALARY´].Value := Convert.ToDecimal(txtSalary.Text);
cmdInsEmployee.ExecuteNonQuery;
except
on e:exception do
lblExcept.Text := e.Message;
end;
finally
Conn.Close;
end;
end;
procedure TWebForm1.setUser;
begin
Conn.Open;
try
cmdInsUser.Parameters[´LOGIN´].Value := txtCadLogin.Text;
cmdInsUser.Parameters[´PASS´].Value := {criptoSenha(}txtCadSenha.Text{)};
cmdInsUser.Parameters[´EMAIL´].Value := txtEmail.Text;
cmdInsUser.ExecuteNonQuery;
finally
Conn.Close;
end;
end;
procedure TWebForm1.OnInit(e: EventArgs);
begin
//
// Required for Designer support
//
InitializeComponent;
inherited OnInit(e);
end;
procedure TWebForm1.atualizaCombJob;
begin
Conn.Open;
try
ddlJob.DataValueField := ´JOB_CODE´;
ddlJob.DataTextField := ´JOB_TITLE´;
ddlJob.DataSource := cmdJob.ExecuteReader;
ddlJob.DataBind;
finally
Conn.Close;
end;
end;
procedure TWebForm1.btnCancel_Click(sender: System.Object; e: System.EventArgs);
begin
Response.Redirect(´../login.aspx´);
end;
function TWebForm1.criptoSenha(Senha: String): String;
var
md5 :MD5CryptoServiceProvider;
Pass,CriptoPass : Array of Byte;
I : Integer;
begin
try
md5 := MD5CryptoServiceProvider.Create;
SetLength(Pass,Senha.Length);
for I := 0 to Length(Pass) - 1 do
begin
Pass[I] := Ord(Senha.Chars[I]);
end;
CriptoPass := md5.ComputeHash(Pass);
Senha := ´´;
for I := 0 to Length(CriptoPass) - 1 do
begin
Senha := Senha + Char(CriptoPass[I]);
end;
Result := Senha;
finally
end;
end;
procedure TWebForm1.btnCadUser_Click(sender: System.Object; e: System.EventArgs);
begin
try
setUser;
setEmployee;
Response.Redirect(´../home.aspx´);
except
on E:Exception do
lblExcept.Text := e.Message;
end;
end;
procedure TWebForm1.ddlJob_SelectedIndexChanged(sender: System.Object; e: System.EventArgs);
var
cmdMinSalary: BdpCommand;
Salary : Decimal;
begin
Conn.Open;
try
try
ddlJobGrade.DataValueField := ´JOB_GRADE´;
ddlJobGrade.DataTextField := ´JOB_GRADE´;
cmdJobGrade.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue;
ddlJobGrade.DataSource := cmdJobGrade.ExecuteReader;
ddlJobGrade.DataBind;
ddlCountry.DataValueField := ´JOB_COUNTRY´;
ddlCountry.DataTextField := ´JOB_COUNTRY´;
cmdJobCountry.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue;
ddlCountry.DataSource := cmdJobCountry.ExecuteReader;
ddlCountry.DataBind;
cmdMinSalary := BdpCommand.Create(´SELECT MIN_SALARY FROM JOB WHERE JOB_CODE = ´+39+ddlJob.SelectedValue+39,Conn);
Salary := Convert.ToDecimal(cmdMinSalary.ExecuteScalar);
txtSalary.Text := Salary.ToString;
except
on e:exception do
lblExcept.Text := e.Message;
end;
finally
Conn.Close;
end;
end;
function TWebForm1.geraEmpNo: Integer;
var
cmdLastEmpNo : BdpCommand;
Emp_NO : Smallint;
begin
try
cmdLastEmpNo := BdpCommand.Create(´SELECT MAX(EMP_NO) FROM EMPLOYEE´,Conn);
Emp_NO := Convert.ToInt16(cmdLastEmpNo.ExecuteScalar);
inc(Emp_NO);
Result := Emp_NO;
finally
end;
end;
procedure TWebForm1.atualizaCombosDepart;
begin
Conn.Open;
try
ddlDepartNo.DataValueField := ´DEPT_NO´;
ddlDepartNo.DataTextField := ´DEPARTMENT´;
ddlDepartNo.DataSource := cmdDepartament.ExecuteReader;
ddlDepartNo.DataBind;
finally
Conn.Close;
end;
end;Na tabela employee tem três campos da tabela job como chave estrangeira que é JOB,JOB_GRADE e JOB_COUNTRY.
Eu linquei as DDLs de maneira que ao selecionar um JOB você só possa escolher o JOB_GRADE e JOB_COUNTRY baseado no job, tipo um master/detail.
Isso tá no evento SelectedIndexChanged da ddlJob.
procedure TWebForm1.ddlJob_SelectedIndexChanged(sender: System.Object; e: System.EventArgs);
GOSTEI 0
Andremfa
10/09/2007
Agora entendi!
No meu caso eu usei um DDL para cada chave estrangeira.
Aí vai a seção implmentation da unit:
Na tabela employee tem três campos da tabela job como chave estrangeira que é JOB,JOB_GRADE e JOB_COUNTRY.
Eu linquei as DDLs de maneira que ao selecionar um JOB você só possa escolher o JOB_GRADE e JOB_COUNTRY baseado no job, tipo um master/detail.
Isso tá no evento SelectedIndexChanged da ddlJob.
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
begin
// TODO: Put user code to initialize the page here
if not IsPostBack then
begin
atualizaCombosDepart;
atualizaCombJob;
end;
end;
procedure TWebForm1.setEmployee;
begin
Conn.Open;
try
try
cmdInsEmployee.Parameters[´FIRST_NAME´].Value := txtFirstName.Text;
cmdInsEmployee.Parameters[´LAST_NAME´].Value := txtLastName.Text;
cmdInsEmployee.Parameters[´PHONE_EXT´].Value := txtPhoneExt.Text;
cmdInsEmployee.Parameters[´HIRE_DATE´].Value := Convert.ToDateTime(txtHireDate.Text);
cmdInsEmployee.Parameters[´DEPT_NO´].Value := ddlDepartNo.SelectedValue;
cmdInsEmployee.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue;
cmdInsEmployee.Parameters[´JOB_GRADE´].Value := ddlJobGrade.SelectedValue;
cmdInsEmployee.Parameters[´JOB_COUNTRY´].Value := ddlCountry.SelectedValue;
cmdInsEmployee.Parameters[´SALARY´].Value := Convert.ToDecimal(txtSalary.Text);
cmdInsEmployee.ExecuteNonQuery;
except
on e:exception do
lblExcept.Text := e.Message;
end;
finally
Conn.Close;
end;
end;
procedure TWebForm1.setUser;
begin
Conn.Open;
try
cmdInsUser.Parameters[´LOGIN´].Value := txtCadLogin.Text;
cmdInsUser.Parameters[´PASS´].Value := {criptoSenha(}txtCadSenha.Text{)};
cmdInsUser.Parameters[´EMAIL´].Value := txtEmail.Text;
cmdInsUser.ExecuteNonQuery;
finally
Conn.Close;
end;
end;
procedure TWebForm1.OnInit(e: EventArgs);
begin
//
// Required for Designer support
//
InitializeComponent;
inherited OnInit(e);
end;
procedure TWebForm1.atualizaCombJob;
begin
Conn.Open;
try
ddlJob.DataValueField := ´JOB_CODE´;
ddlJob.DataTextField := ´JOB_TITLE´;
ddlJob.DataSource := cmdJob.ExecuteReader;
ddlJob.DataBind;
finally
Conn.Close;
end;
end;
procedure TWebForm1.btnCancel_Click(sender: System.Object; e: System.EventArgs);
begin
Response.Redirect(´../login.aspx´);
end;
function TWebForm1.criptoSenha(Senha: String): String;
var
md5 :MD5CryptoServiceProvider;
Pass,CriptoPass : Array of Byte;
I : Integer;
begin
try
md5 := MD5CryptoServiceProvider.Create;
SetLength(Pass,Senha.Length);
for I := 0 to Length(Pass) - 1 do
begin
Pass[I] := Ord(Senha.Chars[I]);
end;
CriptoPass := md5.ComputeHash(Pass);
Senha := ´´;
for I := 0 to Length(CriptoPass) - 1 do
begin
Senha := Senha + Char(CriptoPass[I]);
end;
Result := Senha;
finally
end;
end;
procedure TWebForm1.btnCadUser_Click(sender: System.Object; e: System.EventArgs);
begin
try
setUser;
setEmployee;
Response.Redirect(´../home.aspx´);
except
on E:Exception do
lblExcept.Text := e.Message;
end;
end;
procedure TWebForm1.ddlJob_SelectedIndexChanged(sender: System.Object; e: System.EventArgs);
var
cmdMinSalary: BdpCommand;
Salary : Decimal;
begin
Conn.Open;
try
try
ddlJobGrade.DataValueField := ´JOB_GRADE´;
ddlJobGrade.DataTextField := ´JOB_GRADE´;
cmdJobGrade.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue;
ddlJobGrade.DataSource := cmdJobGrade.ExecuteReader;
ddlJobGrade.DataBind;
ddlCountry.DataValueField := ´JOB_COUNTRY´;
ddlCountry.DataTextField := ´JOB_COUNTRY´;
cmdJobCountry.Parameters[´JOB_CODE´].Value := ddlJob.SelectedValue;
ddlCountry.DataSource := cmdJobCountry.ExecuteReader;
ddlCountry.DataBind;
cmdMinSalary := BdpCommand.Create(´SELECT MIN_SALARY FROM JOB WHERE JOB_CODE = ´+39+ddlJob.SelectedValue+39,Conn);
Salary := Convert.ToDecimal(cmdMinSalary.ExecuteScalar);
txtSalary.Text := Salary.ToString;
except
on e:exception do
lblExcept.Text := e.Message;
end;
finally
Conn.Close;
end;
end;
function TWebForm1.geraEmpNo: Integer;
var
cmdLastEmpNo : BdpCommand;
Emp_NO : Smallint;
begin
try
cmdLastEmpNo := BdpCommand.Create(´SELECT MAX(EMP_NO) FROM EMPLOYEE´,Conn);
Emp_NO := Convert.ToInt16(cmdLastEmpNo.ExecuteScalar);
inc(Emp_NO);
Result := Emp_NO;
finally
end;
end;
procedure TWebForm1.atualizaCombosDepart;
begin
Conn.Open;
try
ddlDepartNo.DataValueField := ´DEPT_NO´;
ddlDepartNo.DataTextField := ´DEPARTMENT´;
ddlDepartNo.DataSource := cmdDepartament.ExecuteReader;
ddlDepartNo.DataBind;
finally
Conn.Close;
end;
end;procedure TWebForm1.ddlJob_SelectedIndexChanged(sender: System.Object; e: System.EventArgs);
Cara funcionou aqui mas tenho que rever algumas coisa mas mesmo assim valeu
Mas poderia me explicar esse código except é para nao deixar deletar as chaves né???
tentei outro método
no web.config mas nao consegui não sei se é isso.... e para erros tb
<customErrors mode=´on´
defaultRedirect=´WebForm2.aspx´/>
GOSTEI 0
Knight_of_wine
10/09/2007
Na verdade não!
Eu não implemento Delete nesse exemplo, apenas insiro os dados de uma cadastro na tela!
Esses excepts são apenas coisa minha, para eu ver o erro na tela.
Eu não implemento Delete nesse exemplo, apenas insiro os dados de uma cadastro na tela!
Esses excepts são apenas coisa minha, para eu ver o erro na tela.
GOSTEI 0
Andremfa
10/09/2007
Na verdade não!
Eu não implemento Delete nesse exemplo, apenas insiro os dados de uma cadastro na tela!
Esses excepts são apenas coisa minha, para eu ver o erro na tela.
A blz entendi é que estou usando no delete para não ocasionar que o usuário delete essa chave entao me confundi com esse código, uso o except e funciona, não deixa deletar mas também não da nehuma mensagem... você fez algo parecido nessa parte???
Obrigado
GOSTEI 0
Nanfilho
10/09/2007
tenho este mesmo problema que o amigo postou
porem dropdownlist para uma tabela com muitos registros fica complicado...
gostaria de saber como abrir uma pequena janela, para o usuario pesquisar na tabela relacionada, e ao confirmar, voltar com o codigo
do relacionamento..
alguem sabe como fazer isso??
porem dropdownlist para uma tabela com muitos registros fica complicado...
gostaria de saber como abrir uma pequena janela, para o usuario pesquisar na tabela relacionada, e ao confirmar, voltar com o codigo
do relacionamento..
alguem sabe como fazer isso??
GOSTEI 0
Signori
10/09/2007
OK, em resposta ao ´nanfilho´.
é meio complicado mas vamo lá.
vc programa orientado a objeto?
vc poderia colocar um componente IMG e no evento onclick colocar um javascript parecido:
isso abrirá um Popup, ou seja uma tela que vc fará onde o usuário poderá consultar os dados. A respeito do código acima o ´txbCOD´ é o textbox onde retornará o código e o ´txbNOME´ retornará o nome por exemplo.
Nessa PopUp, no .aspx vc precisa colocar uma funcao javascript que retorna o valor:
Repare que o ´RetCOD´ e ´RetNOME´ é o mesmo nome dos parametros que foram passados por get anteriormente.
OK. na consulta da popup precisa ter uma coluna retorno que retornará o codigo e o nome.
também por javascript
Essa imagem aparecerá no teu datagrid. E esse campo retorno vc pode colocar na consulta dos dados da popup.
Tenta ai! depois posta ai os resultados ou dúvidas, se vc nao desistir.
:wink:
flw
é meio complicado mas vamo lá.
vc programa orientado a objeto?
vc poderia colocar um componente IMG e no evento onclick colocar um javascript parecido:
javascript: window.open(´pagina.aspx?retCOD=txbCOD&retNOME=txbNOME,´PAGINA_CONSULTA´,´resizable=yes,scrollbars=yes,width=590,height=420,left=100,top=10´)
isso abrirá um Popup, ou seja uma tela que vc fará onde o usuário poderá consultar os dados. A respeito do código acima o ´txbCOD´ é o textbox onde retornará o código e o ´txbNOME´ retornará o nome por exemplo.
Nessa PopUp, no .aspx vc precisa colocar uma funcao javascript que retorna o valor:
<script language="JavaScript" type="text/JavaScript">
function leva(valor,valor2){
opener.document.getElementById("<¬=Request.QueryString["retCOD"]¬>").value = valor;
opener.document.getElementById("<¬=Request.QueryString["retNOME"]¬>").value = valor2;
self.close();
}
</script>Repare que o ´RetCOD´ e ´RetNOME´ é o mesmo nome dos parametros que foram passados por get anteriormente.
OK. na consulta da popup precisa ter uma coluna retorno que retornará o codigo e o nome.
também por javascript
<a href="javascript: leva(´´´+TeuCodigo+´´´,´´´+TeuNome+´´´);"><img src="imagem.gif" border="0" alt="Selecionar Valor"></a>´;
Essa imagem aparecerá no teu datagrid. E esse campo retorno vc pode colocar na consulta dos dados da popup.
Tenta ai! depois posta ai os resultados ou dúvidas, se vc nao desistir.
:wink:
flw
GOSTEI 0
Nanfilho
10/09/2007
fala signori,
cara desde já muito obrigado mesmo, nao posso desistir pois tou fazendo um sistema de gestao, nao tem como usar sempre dropdown
vou tentar implementar essa tua ideia, e vou postando as duvidas aqui nesse mesmo post, muito obrigado novamente!
abraços e ate breve ^^
cara desde já muito obrigado mesmo, nao posso desistir pois tou fazendo um sistema de gestao, nao tem como usar sempre dropdown
vou tentar implementar essa tua ideia, e vou postando as duvidas aqui nesse mesmo post, muito obrigado novamente!
abraços e ate breve ^^
GOSTEI 0
Nanfilho
10/09/2007
bom,nem começei, mas ja tou com problemas...
nao sei muita coisa de .net ainda,mas preciso fazer isso funcionar..
quando clico no botao , ele dá o postback, mas nao abre a janela popup
procedure TWebFormConsultaFunc.Button1_Click(sender: System.Object; e: System.EventArgs); Var JScript:String; begin JScript := ´<script>window.open(´ + ´"lookup.aspx?retCOD=txbCOD&retNOME=txbNOME","Consultar","resizable=yes,scrollbars=yes,´+ ´width=590,height=420,left=100,top=10"</script>)´; RegisterStartupScript(´x´,JScript); end;
nao sei muita coisa de .net ainda,mas preciso fazer isso funcionar..
quando clico no botao , ele dá o postback, mas nao abre a janela popup
GOSTEI 0
Nanfilho
10/09/2007
opa, ja consegui abrir a janela usei string buider e pegou :roll:
criei uma consulta lá,mas tou em duvida de como trazer esse valor, nao entendi muito bem a parte do uso da funcao ´leva´.
tipo, quando na tela anterior eu ficarei sabendo que a tela da frente foi fechada?
falta pouco pra conseguir fazer ^^
valeusssss
procedure TWebFormConsultaFunc.Button1_Click(sender: System.Object; e: System.EventArgs);
Var
script: StringBuilder;
begin
script := StringBuilder.Create;
script.Append(´<script language="JavaScript">´);
script.Append(´window.open("lookup.aspx?retCOD=txbCOD&retNOME=txbNOME", "Consulta",´);
script.Append(´"resizable=no, menubar=no,scrollbars=yes, width=450,height=350")´);
script.Append(´</script>´);
RegisterClientScriptBlock(´client´, script.ToString);
end;criei uma consulta lá,mas tou em duvida de como trazer esse valor, nao entendi muito bem a parte do uso da funcao ´leva´.
tipo, quando na tela anterior eu ficarei sabendo que a tela da frente foi fechada?
falta pouco pra conseguir fazer ^^
valeusssss
GOSTEI 0
Signori
10/09/2007
Olá Kra!
Para abrir a Popup, é uso us componentes HTML, mas se vc conseguiu beleza!
Assim, para trazer o valor após implementar a funcao leva no .aspx, vc coloca onde vc implemementa o codigo da consulta, como se fosse um campo da tabela pode ser chamado ´RETORNO´, ai põe aquele script que ta passei.(o ultimo) Entao la nas proprierties Builder do DataGrid vc coloca esse campo ´RETORNO´.
certo?
Para abrir a Popup, é uso us componentes HTML, mas se vc conseguiu beleza!
Assim, para trazer o valor após implementar a funcao leva no .aspx, vc coloca onde vc implemementa o codigo da consulta, como se fosse um campo da tabela pode ser chamado ´RETORNO´, ai põe aquele script que ta passei.(o ultimo) Entao la nas proprierties Builder do DataGrid vc coloca esse campo ´RETORNO´.
certo?
GOSTEI 0
Signori
10/09/2007
Importante!!
A funcao leva no .aspx da popup vai na tag <head> ... </head>
A funcao leva no .aspx da popup vai na tag <head> ... </head>
GOSTEI 0
Nanfilho
10/09/2007
Meu velho!!!!
consegui!!! 2 dias nisso,mas agora ja consegui fazer retornar..
agora só pra nao perder o costume...consigo trazer na boa conteudo de outras janelas pro textbox...mas se eu quiser jogar direto para uma variavel, session ou algo do tipo, tem como?
pois eu exibo o nome mas o codigo eu tenho que armazenar para inserir
valeu mais uma vez!!!
consegui!!! 2 dias nisso,mas agora ja consegui fazer retornar..
agora só pra nao perder o costume...consigo trazer na boa conteudo de outras janelas pro textbox...mas se eu quiser jogar direto para uma variavel, session ou algo do tipo, tem como?
pois eu exibo o nome mas o codigo eu tenho que armazenar para inserir
valeu mais uma vez!!!
GOSTEI 0
Signori
10/09/2007
O código vc pode retornar a armazenar em um HTM Hidden Field ou seja campo oculto.
Detalhe: para poder usar esse Hidden Field, vc deve clicar com o direito e marcar a opcao parecida com ´Runat Server Control´ dai bufa!!
flw
Detalhe: para poder usar esse Hidden Field, vc deve clicar com o direito e marcar a opcao parecida com ´Runat Server Control´ dai bufa!!
flw
GOSTEI 0
Curiosa
10/09/2007
Ola pessoal.
Vi o post de vcs, se puderem me ajudar, pq o meu problema maior eh que a chamada do Popup eh usando um form modal.
Ja testei usando o Window.Open e funciona, mas qdo uso o JavaScript Window.OpenModal ele dah como objeto invalido ou nulo.
por favor, deem uma olhada no meu topico para entender melhor, obrigada.
[url]http://forum.devmedia.com.br/viewtopic.php?t=100305[/url]
Curiosa
Vi o post de vcs, se puderem me ajudar, pq o meu problema maior eh que a chamada do Popup eh usando um form modal.
Ja testei usando o Window.Open e funciona, mas qdo uso o JavaScript Window.OpenModal ele dah como objeto invalido ou nulo.
por favor, deem uma olhada no meu topico para entender melhor, obrigada.
[url]http://forum.devmedia.com.br/viewtopic.php?t=100305[/url]
Curiosa
GOSTEI 0