Avatar billede halden Nybegynder
13. oktober 2006 - 14:38 Der er 2 kommentarer og
1 løsning

DataGridView event på combobox

Hej,
jeg har et datagridview med 3 kolonner. De 2 første kolonner er DataGridViewComboBoxColumn og den sidste er almindelig tekst.
Den 2. kolonne skal være afhængig af den 1. Hvordan fanger jeg at der bliver valgt noget i den første kolonne og ændre 2. kolonne ???

På forhånd tak.
Avatar billede bulgroz Nybegynder
14. oktober 2006 - 19:53 #1
Du skal lytte til EditingControlShowing eventet. Her får du fat i din aktuelle  ComboBox 

På ComboBoxen lytter du på SelectedIndexChanged eventet. Når dette ændres, ændrer du værdien i din aktuelle kolonne.

Følgende (lidt grimme) eksempel har to kolonner. Den første (Index 0) er ComboBox colonnen. Den næste (Index 1) er en alm. Text colonne.

    public partial class Form1 : Form
    {
        ComboBox currentComboBox = new ComboBox();

        public Form1()
        {
            InitializeComponent();

            // Lyt til EditingControlShowing eventet...
            this.dataGridView.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(DataGridViewEditingControlShowing);
        }

        /// <summary>
        /// Her får du fat i den aktuelle ComboBox
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="dataGridViewEditingControlShowingEventArgs"></param>
        void DataGridViewEditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs dataGridViewEditingControlShowingEventArgs)
        {
            // dataGridViewEditingControlShowingEventArgs.Control kan castes til en ComboBox
            this.currentComboBox = dataGridViewEditingControlShowingEventArgs.Control as ComboBox;
            this.currentComboBox.SelectedIndexChanged += new EventHandler(this.CurrentComboBoxSelectedIndexChanged);
        }


        /// <summary>
        /// Her opdaterer du din værdi hvis selected index ændres i din aktuelle ComboBox
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void CurrentComboBoxSelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.currentComboBox != null)
            {
                int rowIndex = this.dataGridView.CurrentRow.Index;
                DataGridViewRow row = this.dataGridView.Rows[rowIndex];
                this.dataGridView[1, rowIndex].Value = string.Format("Værdien er: {0}", this.currentComboBox.Text); // TODO: Hardcoded værdi for colonne index
            }
        }
    }


Men naturligvis bør du overveje om du har mulighed for at indkapsle dette i en klasse som databindes til dit DataGridView. I såfald vil du spare en masse gymnastik med at få fat i korrekt kolonne osv.
Avatar billede halden Nybegynder
16. oktober 2006 - 08:44 #2
smid svar for point...
Avatar billede bulgroz Nybegynder
16. oktober 2006 - 15:18 #3
Svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester