myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » DataGridViewComboboxColumn mit SelectedItem-Property
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

DataGridViewComboboxColumn mit SelectedItem-Property

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
inflames2k inflames2k ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3407.gif


Dabei seit: 03.01.2010
Beiträge: 1.523
Entwicklungsumgebung: Visual Studio 2005 Standard
Herkunft: Riesa


inflames2k ist offline

DataGridViewComboboxColumn mit SelectedItem-Property

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Beschreibung:

Leider stellt die DataGridViewComboboxCell aus dem Framework keine SelectedItem-Eigenschaft bereit, was besonders dann zu Schwierigkeiten führt, wenn die Spalte Datengebunden ist.

Wie dem Thema  [gelöst] DataGridViewComboBoxCell - Selectiertes Item auslesen, sowie dem MSDN-Beitrag  How to: Access Objects in a Windows Forms DataGridViewComboBoxCell Drop-Down List zu entnehmen ist, geht dies derzeit nur über Workarounds.

Da ich es jedoch weder für sauber halte, dem Business-Objekt eine Property "Self" hinzuzufügen, noch einen Wrapper zu erstellen, um das selektierte Objekt bereit zu stellen, habe ich mir nun also die Zeit genommen und eine abgeleitete DataGridViewColumn erstellt. Diese liefert das gewünschte selektierte Item zurück.

Zuallererst einmal der Code für die erweiterte DataGridViewComboboxCell:

C#-Code:
public class ExtendedDataGridViewComboboxCell : System.Windows.Forms.DataGridViewComboBoxCell
{
    public ExtendedDataGridViewComboboxCell() : base()
    {
    }

        // just a flag to check if the selected index changed
        // was really thrown for this cell
    private bool _bEditingControlShowing = false;

    public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    {
        base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);

                // get the editing control for
                // subscribing the selected index changed event
        DataGridViewComboBoxEditingControl ctrl = DataGridView.EditingControl as DataGridViewComboBoxEditingControl;
        ctrl.SelectedIndexChanged += new EventHandler(ctrl_SelectedIndexChanged);

                // set the current value
        if(this.Value != null)
        {
            ctrl.SelectedItem = this.Value;
        }
        else
        {
            ctrl.SelectedItem = this.DefaultNewRowValue;
        }

        _bEditingControlShowing = true;
    }

    private Object _selectedItem;
    /// <summary>
    /// gets the selected item
    /// </summary>
    public Object SelectedItem
    {
        get { return _selectedItem; }
        private set { _selectedItem = value; }
    }

    /// <summary>
    /// eventhandler for selected index changed of the editing control
    /// </summary>
    void ctrl_SelectedIndexChanged(object sender, EventArgs e)
    {
        // get the editing control
        DataGridViewComboBoxEditingControl control = sender as DataGridViewComboBoxEditingControl;

        // we have to check if the row index of the editing control is
        // the index of this cell otherwise the value will be set
        // on all cells working with the control
        if(control.EditingControlRowIndex == this.RowIndex && _bEditingControlShowing)
        {
            this._selectedItem = control.SelectedItem;
            _bEditingControlShowing = false;
        }
    }
}

Um die erweiterte DataGridViewComboboxCell nutzen zu können benötigen wir ebenfalls eine Spalte, die diese Art von Zellen generiert. Diese zugehörige Klasse ist sehr kurz gehalten und setzt im Konstruktor lediglich das CellTemplate.

C#-Code:
public class ExtendedDataGridViewComboboxColumn : System.Windows.Forms.DataGridViewComboBoxColumn
{
    public ExtendedDataGridViewComboboxColumn() : base()
    {
        this.CellTemplate = new ExtendedDataGridViewComboboxCell();
    }
}

Schlagwörter: DataGridViewComboboxColumn SelectedItem auslesen, DataGridViewComboboxColumn mit SelectedItem, DataGridView, ExtendedDataGridViewComboboxColumn

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inflames2k am 22.01.2013 19:47.

Neuer Beitrag 22.01.2013 19:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Monate.
Der letzte Beitrag ist älter als 4 Monate.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 23.05.2013 13:00