Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Etiqueta

Guardar o id do dataset que está no datagrid

Mensagens Recomendadas

Etiqueta    0
Etiqueta

Bom dia,

estou a desenvolver um programa em c#. Nessa aplicação tenho um componente TabControl. Num dos separadores tenho um datagrid alimentado por um dataset e noutro separador tenho a informação que posso pôr manualmente para o dataset.

O que eu queria fazer era no separador do datagrid, clicar duas vezes e ele abrir o outro separador com as informações (textbox) e alterar aquele registo do dataset.

Nas propriedades do datagri coloquei o SelectionMode a FullRowSelect.

O que eu tenho de código para saber a linha:

foreach (DataGridViewRow _linhaSelecionada in dB1_EntidadeDataGridView.SelectedRows)
            {
                //este código é apara aparecer o separador que quero
                Menus.SelectedIndex = 2;

            }

Obs: Menus é o nome que dei ao TabControl

Agora como faço para saber o id do dataset que está selecionado no datagrid?

Têm alguma sugestão?

Desde já muito obrigada

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

Olá,

deve ser qualquer coisa como isto:

id = dgv["nomeColunaId", dgv.CurrentRow.Index];

Outra coisa que podes fazer é utilizar uma bindingsource para alimentares as grelhas e as caixas de texto em simultâneo. Desta forma, quando escolhes uma linha na grelha, as caixas de texto são preenchidas automáticamente, e a bindingsource tem métodos para devolver a linha escolhida directamente.

bom trabalho  :(

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Obrigada hsimoes.

Era mesmo isso que eu precisava.

Ficou assim:

private void dB1_EntidadeDataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            foreach (DataGridViewRow _linhaSelecionada in dB1_EntidadeDataGridView.SelectedRows)
            {
                //as linhas selecionadas
                dB1_EntidadeBindingSource.DataSource = dB1_EntidadeDataGridView["ID_Entidade", dB1_EntidadeDataGridView.CurrentRow.Index];
            }
            Menus.SelectedIndex = 1;
        }

Bom resto de dia

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Bom dia.

Agarrei no id do dataset que estava no datagrid e as textbox foram alterando com a informação de cada id, mas as combobox associadas não alteram consoante o id.

Tentei associar o BindingSource de cada combobox para ver se altera e não resultado nenhum. ficam sempre com a primeira informação guardada na base de dados.

Tenho o código assim:

private void dB1_EntidadeDataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            foreach (DataGridViewRow _linhaSelecionada in dB1_EntidadeDataGridView.SelectedRows)
            {
                //as linhas selecionadas
                dB1_EntidadeBindingSource.DataSource = dB1_EntidadeDataGridView["ID_Entidade", dB1_EntidadeDataGridView.CurrentRow.Index];

             // COMBOBOX
              tB1TpEntidadeBindingSource.DataSource = dB1_EntidadeDataGridView["ID_TpEntidade", dB1_EntidadeDataGridView.CurrentRow.Index];
                tB1GpEntidadeBindingSource.DataSource = dB1_EntidadeDataGridView["ID_GpEntidade", dB1_EntidadeDataGridView.CurrentRow.Index];
                tB1FonteBindingSource.DataSource = dB1_EntidadeDataGridView["ID_Fonte", dB1_EntidadeDataGridView.CurrentRow.Index];[
            }
            Menus.SelectedIndex = 1;
        }

Obrigada pela ajuda.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

Olá,

eu acho que o problema é o seguinte: a fonte de dados das tuas combobox não deve ser a linha da grelha seleccionada. Provavelmente é uma tabela auxiliar da tua tabela principal, ou então são valores pré-determinados por ti.

O que tens de fazer é carregar a combobox com todos os valores possíveis para esse campo (isto normalmente no evento "Load"do form) e, quando na grelha principal fôr seleccionado um registo, alterares o índice do item escolhido na combobox,que corresponde ao valor que tens guardado nesse registo.

Espero que te ajude um pouco.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Fiquei um pouco confusa.

Sim, as combobox são tabelas auxiliares.

Coloquei este código no load

tB1TpEntidadeBindingSource.DataSource = dB1_EntidadeDataGridView["ID_TpEntidade", dB1_EntidadeDataGridView.CurrentRow.Index];

o projecto corre mas no datagrid só aparece o primeiro registo e o resto fica tudo a branco (sem linhas nem nada), clico no registo do datagrid e as combobox no outro separador não alteram à mesma.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Fiz ainda de outra maneiras mas continua sem dar.

coloquei no load

tpEntidadeComboBox.DataSource = tB1TpEntidadeBindingSource;

e no datagird mantive

tB1TpEntidadeBindingSource.DataSource = dB1_EntidadeDataGridView["ID_TpEntidade", dB1_EntidadeDataGridView.CurrentRow.Index];

mas continua sem dar...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

Pois, a minha primeira frase da resposta anterior diz precisamente para NÃO fazeres isso assim.

No load do form o que tens de fazer é carregar a combobox com os valores dessa tabela auxiliar.

Quando alguém selecciona um registo na tua grelha, o que vais fazer é mudar o item seleccionado dessa combobox.

No load será qualquer coisa deste género:

ComboBox cb = new ComboBox();

            cb.DataSource = dataSetDados.Tables["TabelaAuxiliar"];
            cb.DisplayMember = "ColunaDescricaoTabelaAuxiliar";
            cb.ValueMember = "ColunaIdTabelaAuxiliar";

No evento de selecção de linha, qualquer coisa como isto:

cb.SelectedValue = dB1_EntidadeDataGridView["ID_TpEntidade", dB1_EntidadeDataGridView.CurrentRow.Index]; 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

declarei isto global

public partial class GestaoAssit : Form
    {
         ComboBox cb = new ComboBox();

coloquei isto no load

cb.DataSource = dSEntidade.Tables["TB1_TpEntidade"];
            cb.DisplayMember = "TpEntidade";
            cb.ValueMember = "ID_TpEntidade";

e no datagrig tenho

cb.SelectedValue = dB1_EntidadeDataGridView["ID_TpEntidade", dB1_EntidadeDataGridView.CurrentRow.Index];

Obrigada pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

Primeira coisa:

testar se na combobox estão todos os valores esperados.

Se sim, pode ser questão de fazer um debug. Coloca um break a seguir a

cb.SelectedValue = dB1_EntidadeDataGridView["ID_TpEntidade", dB1_EntidadeDataGridView.CurrentRow.Index];

e verifica os valores das propriedades. Por vezes pode ser questão de forçar a combo a redesenhar.

Por exemplo:

cb.Refresh();

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

continuo sem conseguir alterar o conteúdo da combobox (tabela auxiliar) consoante o id seleccionado no datagrid.

Podem ajudar-me sff.

Os nomes estão todos certos. Fiz copy past para não me enganar.

Não sei o que fazer mais para isto funcionar.

Alguma sugestão?

Obrigada pela ajuda.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

Verifica se a tabela do dataset que estás a fornecer à combobox está preenchida. Não percebi o que quiseste dizer com

Os nomes estão todos certos. Fiz copy past para não me enganar.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Bom dia,

No dataset já fiz o "Preview Data" e os dados aparecem lá.

O que eu quis dizer foi que copiei os nomes dos campos directamente da base de dados para o código para não colocar um nome incorrecto.

Obrigada pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade