Jump to content
frlopes

Problema com DataGridViewComboBoxColumn

Recommended Posts

Pessoal, boa tarde. 

 

Estou com alguns probleminhas, se alguém puder me ajudar, agradeço imensamente!

Tenho uma aplicação windows form em c# que tem um DataGridView, neste DataGridView tenho 2 colunas que são DataGridViewComboBoxColumn.

O que eu espero que aconteça? Quando selecionado o valor de um, jogar o "Value" na coluna anterior. Enfim, Tentei com o código abaixo, porém, estou com alguns problemas:

 

1 - Só consigo selecionar um item do grid, clicando 2 x no mesmo, a primeira vez que eu clico, não abre a lista de seleção, somente na segunda vez.

 

2 - As vezes, retorna o valor "System.Data.DataRowView" na coluna anterior.

 

3 - Os combos, coincidentemente, serão carregados com o mesmo valor, mas caso não fossem, como eu deveria fazer?

 

4 - Existe uma forma de eu adicionar um item manualmente, por exemplo, como estão trazendo uma lista do banco de dados, supondo que eu traga "Santos", "São vicente", "Guarujá" e queira que o primeiro item seja "<selecione>", que não faz parte do banco de dados, não está no meu DataTable, como faço neste caso? 

 

 

Obrigada, pessoal... 

:smile:

 

 

public FrmAlterarTipoAcomodacao()
{
    InitializeComponent();
}

TipoAcomodacao tipoAcomodacao = new TipoAcomodacao();

public void CarregarTipoAcomodacao()
{
    DataTable dtbTipoAcomodacao = tipoAcomodacao.ListarTipoAcomodacao();
    
    col1TipoAcomodacao.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO";
    col1TipoAcomodacao.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO";
    col1TipoAcomodacao.DataSource = dtbTipoAcomodacao;

    col1TipoAcomodacaoAutorizada.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO";
    col1TipoAcomodacaoAutorizada.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO";
    col1TipoAcomodacaoAutorizada.DataSource = dtbTipoAcomodacao;
}

private void FrmAlterarTipoAcomodacao_Load(object sender, EventArgs e)
{
    dgvProfissional.Rows.Add();
    dgvProfissional.Rows.Add();
    dgvProfissional.Rows.Add();
    dgvProfissional.Rows.Add();

    CarregarTipoAcomodacao();

    dgvProfissional.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgvProfissional_EditingControlShowing);
}

public FrmAlterarTipoAcomodacao()
{
    InitializeComponent();
}

TipoAcomodacao tipoAcomodacao = new TipoAcomodacao();

public void CarregarTipoAcomodacao()
{
    DataTable dtbTipoAcomodacao = tipoAcomodacao.ListarTipoAcomodacao();
    
    col1TipoAcomodacao.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO";
    col1TipoAcomodacao.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO";
    col1TipoAcomodacao.DataSource = dtbTipoAcomodacao;

    col1TipoAcomodacaoAutorizada.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO";
    col1TipoAcomodacaoAutorizada.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO";
    col1TipoAcomodacaoAutorizada.DataSource = dtbTipoAcomodacao;
}

private void FrmAlterarTipoAcomodacao_Load(object sender, EventArgs e)
{
    dgvProfissional.Rows.Add();
    dgvProfissional.Rows.Add();
    dgvProfissional.Rows.Add();
    dgvProfissional.Rows.Add();

    CarregarTipoAcomodacao();

    dgvProfissional.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgvProfissional_EditingControlShowing);
}
ComboBox combo;


private void dgvProfissional_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{
        ComboBox comboBox = e.Control as ComboBox;
        if (comboBox != null)
        {
            comboBox.SelectedIndexChanged -= new EventHandler(combo_SelectedIndexChanged);

            comboBox.SelectedIndexChanged += combo_SelectedIndexChanged;
        }
}

private void combo_SelectedIndexChanged(object sender, EventArgs e)
{
    if ((sender as ComboBox).SelectedIndex > 0)
    {
        string selected = (sender as ComboBox).SelectedValue.ToString();

        if (dgvProfissional.CurrentCell.ColumnIndex == 11)
        {
            dgvProfissional.Rows[dgvProfissional.CurrentRow.Index].Cells["col1CodigoTipoAcomodacao"].Value = selected;
        }
        if (dgvProfissional.CurrentCell.ColumnIndex == 18)
        {
            dgvProfissional.Rows[dgvProfissional.CurrentRow.Index].Cells["col1CodigoTipoAcomodacaoAutorizada"].Value = selected;
        }
    }
}

 

Capturar.PNG

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Felipe Nobre
      boa noite galera
      Alguém sabe como corrigir esse erro? Eu consigo gerar o PDF normalmente quando o texto não inclui caracteres especiais ou 
      caracteres comuns como acentos etc..
      No app config pensei que fosse o UTF mas está como padrão UTF-8
      Creio que deve ser alguma renderização. PS: Estou utilizando a fonte padrão ARIAL no design do meu report. Minhas referencias com versão mais atual são essas


    • By lucas9
      Com base nos conceitos de reutilização de código e flexibilidade, você deve planejar uma classe de faturamento com o método faturar. Lembre-se que não é permitido reescrever métodos; no entanto, deve ser considerado que cada perfil de cliente tem uma regra de faturamento diferente. Veja:
      Cliente pessoa física recebe um desconto de 15% e tem 30 dias para pagar. Cliente pessoa jurídica recebe um desconto de 20% e tem 60 dias para pagar. Cliente governo não recebe desconto e deve pagar à vista. Use os comandos try e catch para tratar as possíveis exceções (por exemplo, tentar ler mais clientes do que existem).
    • By Estevão Alves Avelino
      Estou com duvidas de como pegar os dados digitados no DataGridView e jogar dentro de variáveis, se alguém souber uma maneira de fazer isso ficarei muito grato!
    • By Estevão Alves Avelino
      Estou com duvidas de como pegar os dados digitados no DataGridView e jogar dentro de variáveis, se alguém souber uma maneira de fazer isso ficarei muito grato!
    • By QBAX
      #include <iostream>
      #include <stdio.h>
      #include <stdlib.h>

      int main()
      {
          float alt, massa, IMC;
           printf("Digite sua Altura (Metros): ");
          scanf("%f",&alt);
           printf("Digite sua Massa (Kg): ");
          scanf("%f",&massa);
          IMC = (alt*alt);
          IMC = (massa/IMC);
          
          printf("-----------------------------------\n");
          printf("Seu IMC e: %0.2f\n",IMC);
          if(IMC<=17)
          {
              printf("Muito abaixo do peso.\n");
          }
          else
          {
              if(IMC>17 && IMC<=18.49)
              {
                  printf("Abaixo do peso.\n");
              }
              else
              {
                  if(IMC>=18.5 && IMC<=24.99)
                  {
                      printf("Peso normal.\n");
                  }
                  else
                  {
                      if(IMC>=25 && IMC<=29.99)
                      {
                          printf("Acima do peso.\n");
                      }
                      else
                      {
                          if(IMC>=30 && IMC<=34.99)
                          {
                              printf("voce esta Obeso.\n");
                          }
                          else
                          {
                              if(IMC>=35 && IMC<=39.99)
                              {
                                  printf("Obesidade Severa.\n");
                              }
                              else
                              {
                                  if (IMC>=40)
                                  {
                                      printf("voce esta em Obesidade MORBIDA.\n");
                                  }
                              }
                          }
                      }
                  }
              }
          }
          return 0;
      }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.