none
DataGridView und ComboBox RRS feed

  • Frage

  • Hallo Forum,

    ich habe ein DataGridView in dem ich per Code eine ComboBox erzeuge :

          DataGridViewComboBoxColumn Umsetzung = new DataGridViewComboBoxColumn();
          Umsetzung.DataPropertyName = "Umsetzung";
          Umsetzung.HeaderText = "Umsetzung mit";
          Umsetzung.Width = 160;
          Umsetzung.DataSource = UmwandlTabKopf;
          Umsetzung.ValueMember = "UmID";
          Umsetzung.DisplayMember = "UmBezeich";
          UebersetzteWerteDataGridView.Columns.Add(Umsetzung);

    Wenn ich nun einen Eintrag auswähle, möchte ich den selektierten Wert "UmID" in einem label anzeigen. Leider komme ich da nicht weiter.

    Ausserdem sollen alle selektierten Werte in den Zeilen immer angezeigt werden auch wenn die Sortierung in einer anderen Spalte geändert wird. Wie geht das ?

    Kann mir da jemand helfen ?


    Gruß Roland
    Dienstag, 30. August 2011 13:13

Antworten

  • Hallo Roland,

    hier eine Möglichkeit:

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WinDgvDemo2
    {
     public partial class Form1 : Form
     {
      DataGridView UebersetzteWerteDataGridView = new DataGridView();
      DataTable UmwandlTabKopf = new DataTable();
      Label lblInfo = new Label();
    
      public Form1()
      {
       InitializeComponent();
    
       Controls.Add(UebersetzteWerteDataGridView);
       Controls.Add(lblInfo); 
       lblInfo.Top = UebersetzteWerteDataGridView.Height;
    
       UmwandlTabKopf.Columns.Add("Umsetzung", typeof(int));
       UmwandlTabKopf.Columns.Add("UmID", typeof(int));
       UmwandlTabKopf.Columns.Add("UmBezeich", typeof(string));
       UmwandlTabKopf.Rows.Add(142, 42, "Bez 42");
       UmwandlTabKopf.Rows.Add(143, 43, "Bez 43");
       UmwandlTabKopf.Rows.Add(144, 44, "Bez 44");
       UmwandlTabKopf.Rows.Add(145, 45, "Bez 45");
       UmwandlTabKopf.AcceptChanges();
    
       DataGridViewComboBoxColumn Umsetzung = new DataGridViewComboBoxColumn();
       Umsetzung.DataPropertyName = "Umsetzung";
       Umsetzung.HeaderText = "Umsetzung mit";
       Umsetzung.Width = 160;
       Umsetzung.DataSource = UmwandlTabKopf;
       Umsetzung.ValueMember = "UmID";
       Umsetzung.DisplayMember = "UmBezeich";
       UebersetzteWerteDataGridView.Columns.Add(Umsetzung);
    
       UebersetzteWerteDataGridView.EditingControlShowing += UebersetzteWerteDataGridView_EditingControlShowing;
       UebersetzteWerteDataGridView.EditMode = DataGridViewEditMode.EditOnEnter;
      }
    
      void UebersetzteWerteDataGridView_EditingControlShowing(
       object sender, DataGridViewEditingControlShowingEventArgs e)
      {
       DataGridViewComboBoxEditingControl ctl = e.Control as DataGridViewComboBoxEditingControl;
       if (ctl == null) return;
       ctl.SelectedValueChanged -= ctl_SelectedValueChanged;
       ctl.SelectedValueChanged += ctl_SelectedValueChanged;
      }
    
      void ctl_SelectedValueChanged(object sender, EventArgs e)
      {
       DataGridViewComboBoxEditingControl ctl = sender as DataGridViewComboBoxEditingControl;
       if (ctl == null) return;
       lblInfo.Text = ctl.EditingControlFormattedValue.ToString();
      }
     }
    }
    
     


    ciao Frank
    Dienstag, 30. August 2011 14:31

Alle Antworten

  • Hallo Roland,

    hier eine Möglichkeit:

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WinDgvDemo2
    {
     public partial class Form1 : Form
     {
      DataGridView UebersetzteWerteDataGridView = new DataGridView();
      DataTable UmwandlTabKopf = new DataTable();
      Label lblInfo = new Label();
    
      public Form1()
      {
       InitializeComponent();
    
       Controls.Add(UebersetzteWerteDataGridView);
       Controls.Add(lblInfo); 
       lblInfo.Top = UebersetzteWerteDataGridView.Height;
    
       UmwandlTabKopf.Columns.Add("Umsetzung", typeof(int));
       UmwandlTabKopf.Columns.Add("UmID", typeof(int));
       UmwandlTabKopf.Columns.Add("UmBezeich", typeof(string));
       UmwandlTabKopf.Rows.Add(142, 42, "Bez 42");
       UmwandlTabKopf.Rows.Add(143, 43, "Bez 43");
       UmwandlTabKopf.Rows.Add(144, 44, "Bez 44");
       UmwandlTabKopf.Rows.Add(145, 45, "Bez 45");
       UmwandlTabKopf.AcceptChanges();
    
       DataGridViewComboBoxColumn Umsetzung = new DataGridViewComboBoxColumn();
       Umsetzung.DataPropertyName = "Umsetzung";
       Umsetzung.HeaderText = "Umsetzung mit";
       Umsetzung.Width = 160;
       Umsetzung.DataSource = UmwandlTabKopf;
       Umsetzung.ValueMember = "UmID";
       Umsetzung.DisplayMember = "UmBezeich";
       UebersetzteWerteDataGridView.Columns.Add(Umsetzung);
    
       UebersetzteWerteDataGridView.EditingControlShowing += UebersetzteWerteDataGridView_EditingControlShowing;
       UebersetzteWerteDataGridView.EditMode = DataGridViewEditMode.EditOnEnter;
      }
    
      void UebersetzteWerteDataGridView_EditingControlShowing(
       object sender, DataGridViewEditingControlShowingEventArgs e)
      {
       DataGridViewComboBoxEditingControl ctl = e.Control as DataGridViewComboBoxEditingControl;
       if (ctl == null) return;
       ctl.SelectedValueChanged -= ctl_SelectedValueChanged;
       ctl.SelectedValueChanged += ctl_SelectedValueChanged;
      }
    
      void ctl_SelectedValueChanged(object sender, EventArgs e)
      {
       DataGridViewComboBoxEditingControl ctl = sender as DataGridViewComboBoxEditingControl;
       if (ctl == null) return;
       lblInfo.Text = ctl.EditingControlFormattedValue.ToString();
      }
     }
    }
    
     


    ciao Frank
    Dienstag, 30. August 2011 14:31
  • Hallo Roland DE,

    Hat Dir die Antwort geholfen?

    Grüße,
    Robert

    Donnerstag, 1. September 2011 11:32
    Moderator
  • Hallo Roland DE,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Montag, 5. September 2011 10:15
    Moderator