Autor Beitrag
Thorsten Kettner
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 21.07.11 14:29 
Hallo, ich versuche ein DataGridView mit einer editierbaren ComboBox aufzubauen und scheitere. Ich habe schon gelesen, dass man den DropDown-Stil erst im EditingControlShowing setzt, und das funktioniert auch. Nur, wenn ich einen Wert eingeben will, der nicht in der Liste ist, wird der entweder einfach ignoriert (es wird wieder der zuvor gewählte Eintrag gezeigt) oder ich bekomme sogar eine Exception: "DataGridView-Ausnahme:System.ArgumentException: Der DataGridViewComboBoxCell-Wert ist ungültig.Behandeln Sie das DataError-Ereignis, um dieses Standarddialogfeld zu ersetzen".

Damit wird DropDown statt DropDownList natürlich sinnlos. Ich will auch nicht die Liste erweitern, denn sie soll ja bewusst nur die Favoriten enthalten. Unten seht ihr meinen Code. Die Werte der ComboBox sind Anja, Anton und Archibald. Ich möchte aber auch Anna eingeben können, obwohl sie nicht in der Liste steht und auch nicht rein soll. Wie mache ich das? Kann ich irgendwas im CellValidating- oder Validating-Eventhandler machen, um Anna zu akzeptieren? Oder wo sonst?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
    public partial class Form1 : Form
    {
        BindingList<string> lookup = new BindingList<string>() { "Anja""Anton""Archibald" };

        public Form1()
        {
            InitializeComponent();

            DataGridViewComboBoxColumn comboBox = new DataGridViewComboBoxColumn();
            comboBox.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
            comboBox.DataSource = lookup;
            dataGridView1.Columns.Add(comboBox);
            dataGridView1.Rows.Add();
        }

        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            DataGridViewComboBoxEditingControl comboBox = e.Control as DataGridViewComboBoxEditingControl;
            if (comboBox != null)
            {
                comboBox.DropDownStyle = ComboBoxStyle.DropDown;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(dataGridView1.Rows[0].Cells[0].FormattedValue.ToString());
        }
    }


(Ich habe die Frage vor ein paar Tagen schon in myCSharp.de gestellt, erhalte dort aber keine Antwort. Ich hoffe, ihr könnt mir weiterhelfen.)

Moderiert von user profile iconKha: C#-Tags hinzugefügt