Fórum Gravar Chave Estrangeira #66100

10/09/2007

0

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.... :?:


Andremfa

Andremfa

Responder

Posts

12/09/2007

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.

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.


Responder

Gostei + 0

13/09/2007

Andremfa

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.
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.



Obrigado de extrema importancia esse topico
Vou implementar aqui...


Responder

Gostei + 0

18/09/2007

Andremfa

[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.
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.



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...


Responder

Gostei + 0

19/09/2007

Knight_of_wine

Como é a estrutura da sua tabela?


Responder

Gostei + 0

19/09/2007

Andremfa

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....


Responder

Gostei + 0

19/09/2007

Knight_of_wine

Agora entendi!

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);



Responder

Gostei + 0

20/09/2007

Andremfa

Agora entendi! 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);



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´/>


Responder

Gostei + 0

21/09/2007

Knight_of_wine

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.


Responder

Gostei + 0

21/09/2007

Andremfa

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


Responder

Gostei + 0

05/11/2007

Nanfilho

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??


Responder

Gostei + 0

06/11/2007

Signori

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:
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


Responder

Gostei + 0

06/11/2007

Nanfilho

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 ^^


Responder

Gostei + 0

07/11/2007

Nanfilho

bom,nem começei, mas ja tou com problemas...

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


Responder

Gostei + 0

07/11/2007

Nanfilho

opa, ja consegui abrir a janela usei string buider e pegou :roll:

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


Responder

Gostei + 0

07/11/2007

Signori

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?


Responder

Gostei + 0

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

Aceitar