Ir para o conteúdo
Etiqueta

Copiar campo de um dataset para outro

Mensagens Recomendadas

Etiqueta    0
Etiqueta

Boa tarde,

tenho duas combobox, uma entidade e outra individuo. O que pretendo fazer é copiar o nome do individuo para a entidade.

No dataset do individuo o campo é "Individuo" e na entidade é "Entidade".

Estou a utilizar o seguinte código:

foreach (DataRow _linhaOrigem in dSIndividuo.DB1_Individuo.Rows)
                {
                    DataRow _linhaDestino = dSEntidade.DB1_Entidade.NewRow();
                    _linhaDestino["Entidade"] = _linhaOrigem["Individuo"];
                    dSEntidade.DB1_Entidade.Rows.Add(_linhaDestino);
                }

Com este código coloca todos os registos do individuo no dataset entidades e deveria ser só o individuo seleccionado na combbox.

Eu sei que não posso utilizar o foreach porque assim passa cada linha encontrada, mas não estou a ver como agarrar no id da combbox. Já utilizei combobox.selectitem e não dá.

Obrigada pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Continuo sem conseguir...

tenho o código assim:

if (individuoComboBox.SelectedValue == null)
            {
                MessageBox.Show("Erro ao definir o individuo como entidade!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                    DataRow _linhaOrigem = dSIndividuo.DB1_Individuo.Rows; //dá erro aqui
                    DataRow _linhaDestino = dSEntidade.DB1_Entidade.NewRow();
                    _linhaDestino["Entidade"] = _linhaOrigem["Individuo"];
                    dSEntidade.DB1_Entidade.Rows.Add(_linhaDestino);
            }

O erro que dá é:

cannot implicitly convert type 'System.Data.DataRowCollection' to 'System.Data.DataRow'

Obrigada pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Caça    24
Caça

Tens de indicar um DataRow.

Estás a passar isto

dSIndividuo.DB1_Individuo.Rows;

mas ele só quer um, tens de pegar no DataRow pretendido

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

deu  :biggrin: Obrigada.

A única coisa que faz agora é quando corro o programa e tento colocar pela 2vez outro valor, ele coloca sempre o primeiro que seleccionei. Mas penso que consigo resolver isto agora.

Obrigada  ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Etiqueta    0
Etiqueta

Boa tarde,

o meu código está assim até ao momento:

private void btn_CriarEntidade_Click(object sender, EventArgs e)
        {
            if (individuoComboBox.SelectedValue == null)
            {
                MessageBox.Show("Erro ao definir o individuo como entidade!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {   
                    DataRow _linhaOrigem = dSIndividuo.DB1_Individuo.Rows[0];
                    DataRow _linhaDestino = dSEntidade.DB1_Entidade.NewRow();
                    _linhaDestino["Entidade"] = _linhaOrigem["Individuo"];

                    dSEntidade.DB1_Entidade.Rows.Add(_linhaDestino);
                    tableAdapterManager1.UpdateAll(dSEntidade);
                    MessageBox.Show("O Individuo foi registado com entidade com sucesso!", "Mensagem", MessageBoxButtons.OK);
            }
        }

se clicar duas vezes no botão adiciona o mesmo item mesmo quando se estão a adiconar itens diferentes

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

Aqui tens código para copiar linhas. Estou a assumir que origem e destino são duas instâncias diferentes.

Mais uma dica: não faças

_linhaDestino["Entidade"] = _linhaOrigem["Individuo"];

Podes utilizar o seguinte método:

public static void CopiaLinha(DataRow origem, DataRow destino)
        {
            foreach (DataColumn col in destino.Table.Columns)
            {
                if (origem.Table.Columns.Contains(col.ColumnName))
                {
                    if (!destino.Table.Columns[col.ColumnName].ReadOnly && origem.IsNull(col.ColumnName))
                    {
                        destino[col.ColumnName] = DBNull.Value;
                    }
                    else if(!destino.Table.Columns[col.ColumnName].ReadOnly)
                        destino[col.ColumnName] = origem[col.ColumnName];
                }
            }
        }

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hsimoes    0
hsimoes

Em relação ao post anterior a este, isso acontece-te porque estás sempre a ir buscar a primeira linha da tabela, seja ela qual fôr. Tens de selecionar a linha. Isso pode ser feito através do método select da dataTable.

Já agora... aconselho-te a investires algum tempo a perceber algumas coisas:

- como funciona a interacção de datasets com bases de dados e datadapters (carregar, actualizar).

- como utilizares um dataset para alimentares os dados dos teus controlos (Databinding). A classe BindingSource ajuda bastante nisto.

Entende um dataset como uma representação da base de dados, mas está em memória.

Numa fase inicial, utilizar StronglyTyped Datasets pode-te facilitar a vida, uma vez que trata logo das queries e tudo.

Experimentar configurar um Dataset através do designer do visualstudio.

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 os nossos Termos de Uso e Política de Privacidade