Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

DataGridViewComboBoxColumn-Klasse

Stellt eine Spalte von DataGridViewComboBoxCell-Objekten dar.

System.Object
  System.Windows.Forms.DataGridViewElement
    System.Windows.Forms.DataGridViewBand
      System.Windows.Forms.DataGridViewColumn
        System.Windows.Forms.DataGridViewComboBoxColumn

Namespace:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)
[ToolboxBitmapAttribute(typeof(DataGridViewComboBoxColumn), "DataGridViewComboBoxColumn.bmp")]
public class DataGridViewComboBoxColumn : DataGridViewColumn

Der DataGridViewComboBoxColumn-Typ macht die folgenden Member verfügbar.

  Name Beschreibung
Öffentliche Methode DataGridViewComboBoxColumn Initialisiert eine neue Instanz der DataGridViewTextBoxColumn-Klasse im Standardzustand.
Zum Seitenanfang
  Name Beschreibung
Öffentliche Eigenschaft AutoComplete Ruft einen Wert an, der angibt, ob Zellen in der Spalte die in die jeweilige Zelle eingegebenen Werte mit den möglichen Auswahlmöglichkeiten vergleichen, oder legt diesen fest.
Öffentliche Eigenschaft AutoSizeMode Ruft den Modus ab, in dem die Spalte automatisch ihre Breite anpasst, oder legt diesen Modus fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft CellTemplate Ruft die Vorlage ab, mit deren Hilfe Zellen erstellt werden, oder legt diese fest. (Überschreibt DataGridViewColumn.CellTemplate.)
Öffentliche Eigenschaft CellType Ruft den Laufzeittyp der Zellvorlage ab. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft ContextMenuStrip Ruft das Kontextmenü für die Spalte ab oder legt dieses fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft DataGridView Ruft das diesem Element zugeordnete DataGridView-Steuerelement ab. (Von DataGridViewElement geerbt.)
Öffentliche Eigenschaft DataPropertyName Ruft den Namen der Datenquelleneigenschaft oder Datenbankspalte ab, an die DataGridViewColumn gebunden ist, oder legt diesen Namen fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft DataSource Ruft die Datenquelle ab, die die Auswahlmöglichkeiten für die Kombinationsfelder füllt, oder legt diese fest.
Öffentliche Eigenschaft DefaultCellStyle Ruft das Standardzellenformat der Spalte ab oder legt dieses fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft DefaultHeaderCellType Ruft den Laufzeittyp der Standardheaderzelle ab oder legt diesen fest. (Von DataGridViewBand geerbt.)
Öffentliche Eigenschaft Displayed Ruft einen Wert ab, der angibt, ob das Band gegenwärtig auf dem Bildschirm angezeigt wird. (Von DataGridViewBand geerbt.)
Öffentliche Eigenschaft DisplayIndex Ruft die Anzeigereihenfolge der Spalte relativ zu den derzeit angezeigten Spalten ab oder legt sie fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft DisplayMember Ruft eine Zeichenfolge ab, die die Eigenschaft oder Spalte angibt, aus der die in den Kombinationsfeldern anzuzeigenden Zeichenfolgen abgerufen werden, oder legt diese fest.
Öffentliche Eigenschaft DisplayStyle Ruft einen Wert ab, der bestimmt, wie das Kombinationsfeld angezeigt wird, wenn es nicht bearbeitet wird, oder legt diesen fest.
Öffentliche Eigenschaft DisplayStyleForCurrentCellOnly Ruft einen Wert ab, der angibt, ob der DisplayStyle-Eigenschaftswert nur für die aktuelle Zelle im DataGridView-Steuerelement gilt, wenn die aktuelle Zelle sich in dieser Spalte befindet, oder legt diesen fest.
Öffentliche Eigenschaft DividerWidth Ruft die Breite des Spaltenunterteilers in Pixel ab oder legt sie fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft DropDownWidth Ruft die Breite der Dropdownlisten der Kombinationsfelder ab oder legt diese fest.
Öffentliche Eigenschaft FillWeight Ruft einen Wert ab, der die Breite der Spalte im Füllmodus relativ zur Breite anderer im Steuerelement vorhandener Spalten im Füllmodus darstellt, oder legt diesen Wert fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft FlatStyle Ruft die unformatierte Darstellung der Zellen der Spalte ab oder legt diese fest.
Öffentliche Eigenschaft Frozen Ruft einen Wert ab, der angibt, ob eine Spalte verschoben wird, wenn ein Benutzer einen horizontalen Bildlauf durch das DataGridView-Steuerelement durchführt, oder legt diesen Wert fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft HasDefaultCellStyle Ruft einen Wert ab, der angibt, ob die DefaultCellStyle-Eigenschaft festgelegt wurde. (Von DataGridViewBand geerbt.)
Öffentliche Eigenschaft HeaderCell Ruft die DataGridViewColumnHeaderCell ab, die den Spaltenheader darstellt, oder legt sie fest. (Von DataGridViewColumn geerbt.)
Geschützte Eigenschaft HeaderCellCore Ruft die Headerzelle von DataGridViewBand ab oder legt diese fest. (Von DataGridViewBand geerbt.)
Öffentliche Eigenschaft HeaderText Ruft den Beschriftungstext für die Headerzelle der Spalte ab oder legt ihn fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft Index Ruft die relative Position des Bands im DataGridView-Steuerelement ab. (Von DataGridViewBand geerbt.)
Öffentliche Eigenschaft InheritedAutoSizeMode Ruft den für die Spalte gültigen Modus zum Festlegen der Größe ab. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft InheritedStyle Ruft den Zellstil ab, der gegenwärtig auf die Spalte angewendet wird. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft IsDataBound Ruft einen Wert ab, der angibt, ob die Spalte an eine Datenquelle gebunden ist. (Von DataGridViewColumn geerbt.)
Geschützte Eigenschaft IsRow Ruft einen Wert ab, der angibt, ob das Band eine Zeile darstellt. (Von DataGridViewBand geerbt.)
Öffentliche Eigenschaft Items Ruft die Auflistung der Objekte ab, die als Auswahlmöglichkeiten in den Kombinationsfeldern verwendet werden.
Öffentliche Eigenschaft MaxDropDownItems Ruft die maximale Anzahl von Elementen in der Dropdownliste der Zellen in der Spalte ab oder legt diese fest.
Öffentliche Eigenschaft MinimumWidth Ruft die minimale Breite der Spalte in Pixel ab oder legt sie fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft Name Ruft den Namen der Spalte ab oder legt ihn fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft ReadOnly Ruft einen Wert ab, der angibt, ob der Benutzer die Zellen der Spalte bearbeiten kann, oder legt diesen Wert fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft Resizable Ruft einen Wert ab, der angibt, ob die Größe der Spalte geändert werden kann, oder legt diesen fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft Selected Ruft einen Wert ab, der angibt, ob sich das Band in einem ausgewählten Benutzeroberflächenzustand befindet, oder legt diesen Wert fest. (Von DataGridViewBand geerbt.)
Öffentliche Eigenschaft Site Infrastruktur. Ruft die Site der Spalte ab oder legt sie fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft Sorted Ruft einen Wert ab, der angibt, ob die Elemente im Kombinationsfeld sortiert sind, oder legt diesen fest.
Öffentliche Eigenschaft SortMode Ruft den Sortiermodus für die Spalte ab oder legt diesen fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft State Ruft den Benutzeroberflächenzustand des Elements ab. (Von DataGridViewElement geerbt.)
Öffentliche Eigenschaft Tag Ruft das Objekt ab, das dem Band zuzuordnende Daten enthält, oder legt dieses fest. (Von DataGridViewBand geerbt.)
Öffentliche Eigenschaft ToolTipText Ruft den für QuickInfos verwendeten Text ab oder legt diesen fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft ValueMember Ruft eine Zeichenfolge ab, die die Eigenschaft oder Spalte angibt, aus der die Werte abgerufen werden, die den Auswahlmöglichkeiten im Kombinationsfeld entsprechen, oder legt diese fest.
Öffentliche Eigenschaft ValueType Ruft den Datentyp der Werte in den Zellen der Spalte ab oder legt ihn fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft Visible Ruft einen Wert ab, der angibt, ob die Spalte sichtbar ist, oder legt diesen Wert fest. (Von DataGridViewColumn geerbt.)
Öffentliche Eigenschaft Width Ruft die aktuelle Breite der Spalte ab oder legt sie fest. (Von DataGridViewColumn geerbt.)
Zum Seitenanfang
  Name Beschreibung
Öffentliche Methode Clone Erstellt eine genaue Kopie dieser Spalte. (Überschreibt DataGridViewColumn.Clone().)
Öffentliche Methode Dispose() Gibt sämtliche von DataGridViewBand verwendeten Ressourcen frei. (Von DataGridViewBand geerbt.)
Geschützte Methode Dispose(Boolean) Gibt die vom DataGridViewBand verwendeten nicht verwalteten Ressourcen und optional auch die verwalteten Ressourcen frei. (Von DataGridViewColumn geerbt.)
Öffentliche Methode Equals(Object) Bestimmt, ob das angegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte Methode Finalize Gibt die dem Band zugeordneten Ressourcen frei. (Von DataGridViewBand geerbt.)
Öffentliche Methode GetHashCode Fungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche Methode GetPreferredWidth Berechnet die ideale Breite der Spalte auf der Grundlage der angegebenen Kriterien. (Von DataGridViewColumn geerbt.)
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Geschützte Methode OnDataGridViewChanged Wird aufgerufen, wenn das Band einer anderen DataGridView zugeordnet wird. (Von DataGridViewBand geerbt.)
Geschützte Methode RaiseCellClick Löst das DataGridView.CellClick-Ereignis aus. (Von DataGridViewElement geerbt.)
Geschützte Methode RaiseCellContentClick Löst das DataGridView.CellContentClick-Ereignis aus. (Von DataGridViewElement geerbt.)
Geschützte Methode RaiseCellContentDoubleClick Löst das DataGridView.CellContentDoubleClick-Ereignis aus. (Von DataGridViewElement geerbt.)
Geschützte Methode RaiseCellValueChanged Löst das DataGridView.CellValueChanged-Ereignis aus. (Von DataGridViewElement geerbt.)
Geschützte Methode RaiseDataError Löst das DataGridView.DataError-Ereignis aus. (Von DataGridViewElement geerbt.)
Geschützte Methode RaiseMouseWheel Löst das Control.MouseWheel-Ereignis aus. (Von DataGridViewElement geerbt.)
Öffentliche Methode ToString Ruft eine Zeichenfolge ab, die die Spalte beschreibt. (Überschreibt DataGridViewColumn.ToString().)
Zum Seitenanfang
  Name Beschreibung
Öffentliches Ereignis Disposed Tritt ein, wenn die DataGridViewColumn freigegeben ist. (Von DataGridViewColumn geerbt.)
Zum Seitenanfang

Die DataGridViewComboBoxColumn-Klasse ist ein spezieller Typ von DataGridViewColumn zum logischen Hosten von Zellen, mit denen Werte aus einer Liste ausgewählt werden können. Eine DataGridViewComboBoxColumn verfügt in jeder DataGridViewRow, die diese überschneidet, über eine zugeordnete DataGridViewComboBoxCell.

Sie können die Zellen manuell auffüllen, indem Sie ihre Value-Eigenschaften festlegen. Sie können auch die Spalte an die Datenquelle binden, die von der DataGridView.DataSource-Eigenschaft angegeben wird. Wenn die DataGridView an eine Datenbanktabelle gebunden ist, legen Sie die DataPropertyName-Eigenschaft der Spalte auf den Namen einer Tabellenspalte fest. Wenn die DataGridView an eine Auflistung von Objekten gebunden ist, legen Sie die DataPropertyName-Eigenschaft auf den Namen einer Objekteigenschaft fest.

Sie können die Dropdownliste der Spalte manuell auffüllen, indem Sie der Items-Auflistung Werte hinzufügen. Sie können aber auch die Dropdownliste an ihre eigene Datenquelle binden, indem Sie die DataSource-Eigenschaft der Spalte festlegen. Wenn es sich bei den Werten um Objekte einer Auflistung oder Datensätze in einer Datenbanktabelle handelt, müssen Sie außerdem die DisplayMember-Eigenschaft und die ValueMember-Eigenschaft festlegen. Die DisplayMember-Eigenschaft gibt an, welche Objekteigenschaft oder Datenbankspalte die Werte enthält, die in der Dropdownliste angezeigt werden. Die ValueMember-Eigenschaft gibt an, mit welcher Objekteigenschaft oder Datenbankspalte die Value-Eigenschaft der Zelle festgelegt wird.

In einem typischen Szenario wird das DataGridView-Steuerelement an eine übergeordnete Datenbanktabelle und die Dropdownliste an eine verknüpfte untergeordnete Tabelle gebunden. Beispielsweise können Sie das DataGridView-Steuerelement an eine Orders-Tabelle mit einer ProductID-Spalte binden und die DataSource-Eigenschaft der Spalte auf eine Products-Tabelle mit einer ProductID-Spalte und einer ProductName-Spalte festlegen. In diesem Fall legen Sie die DataPropertyName-Eigenschaft der Spalte auf "ProductID" fest, um die Zellwerte anhand der Orders.ProductID-Spalte aufzufüllen. Wenn Sie jedoch in den Zellen und in der Dropdownliste die tatsächlichen Produktnamen anzeigen möchten, müssen Sie der Products-Tabelle die entsprechenden Werte zuordnen, indem Sie die ValueMember-Eigenschaft auf "ProductID" und die DisplayMember-Eigenschaft auf "ProductName" festlegen.

Die Werte der Dropdownliste (oder die durch die ValueMember-Eigenschaft angegebenen Werte) müssen die tatsächlichen Zellwerte enthalten, da das DataGridView-Steuerelement andernfalls eine Ausnahme auslöst.

Durch das Festlegen der Eigenschaften DataSource, DisplayMember und ValueMember der Spalte werden die entsprechenden Eigenschaften für alle Zellen der Spalte und auch für CellTemplate automatisch festgelegt. Wenn Sie diese Eigenschaftswerte für bestimmte Zellen überschreiben möchten, müssen Sie zuerst die Spalteneigenschaft und dann die Zelleigenschaften festlegen.

Im Gegensatz zum ComboBox-Steuerelement verfügt die DataGridViewComboBoxCell nicht über die SelectedIndex-Eigenschaft und die SelectedValue-Eigenschaft. Stattdessen wird durch das Auswählen eines Werts in einer Dropdownliste die Value-Eigenschaft der Zelle festgelegt.

Der Standardsortiermodus für diesen Spaltentyp ist NotSortable.

Hinweise zur Vererbung

Wenn Sie aus DataGridViewComboBoxColumn ableiten und der abgeleiteten Klasse neue Eigenschaften hinzufügen, müssen Sie die Clone-Methode überschreiben, damit die neuen Eigenschaften während der Klonvorgänge kopiert werden. Sie sollten auch die Clone-Methode der Basisklasse aufrufen, sodass die Eigenschaften der Basisklasse in die neue Zelle kopiert werden.

Im folgenden Codebeispiel wird veranschaulicht, wie eine DataGridViewComboBoxColumn verwendet wird, die die Dateneingabe in die Spalte TitleOfCourtesy vereinfacht.


using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Drawing;

public class Employees : Form
{
    private DataGridView DataGridView1 = new DataGridView();
    private DataGridView DataGridView2 = new DataGridView();

    [STAThread]
    public static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.Run(new Employees());
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message + e.StackTrace);
        }
    }

    public Employees()
    {
        this.Load += new EventHandler(Form1_Load);
    }

    private void Form1_Load(System.Object sender, System.EventArgs e)
    {
        try
        {
            SetUpForm();
            SetUpDataGridView1();
            SetUpDataGridView2();
        }
        catch (SqlException)
        {
            MessageBox.Show("The connection string <"
                + connectionString
                + "> failed to connect.  Modify it "
                + "to connect to a Northwind database accessible to "
                + "your system.",
                "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            Application.Exit();
        }
    }

    private void SetUpForm()
    {
        Size = new Size(800, 600);
        FlowLayoutPanel flowLayout = new FlowLayoutPanel();
        flowLayout.FlowDirection = FlowDirection.TopDown;
        flowLayout.Dock = DockStyle.Fill;
        Controls.Add(flowLayout);
        Text = "DataGridView columns demo";

        flowLayout.Controls.Add(DataGridView1);
        flowLayout.Controls.Add(DataGridView2);
    }

    private void SetUpDataGridView2()
    {
        DataGridView2.Dock = DockStyle.Bottom;
        DataGridView2.TopLeftHeaderCell.Value = "Sales Details";
        DataGridView2.RowHeadersWidthSizeMode = 
            DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
    }

    private void SetUpDataGridView1()
    {
        DataGridView1.DataError += new 
            DataGridViewDataErrorEventHandler(DataGridView1_DataError);
        DataGridView1.CellContentClick += new 
            DataGridViewCellEventHandler(DataGridView1_CellContentClick);
        DataGridView1.CellValuePushed += new 
            DataGridViewCellValueEventHandler(DataGridView1_CellValuePushed);
        DataGridView1.CellValueNeeded += new 
            DataGridViewCellValueEventHandler(DataGridView1_CellValueNeeded);

        // Virtual mode is turned on so that the
        // unbound DataGridViewCheckBoxColumn will
        // keep its state when the bound columns are
        // sorted.       
        DataGridView1.VirtualMode = true;
        DataGridView1.AutoSize = true;
        DataGridView1.DataSource = Populate("SELECT * FROM Employees");
        DataGridView1.TopLeftHeaderCell.Value = "Employees";
        DataGridView1.RowHeadersWidthSizeMode = 
            DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
        DataGridView1.ColumnHeadersHeightSizeMode = 
            DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        DataGridView1.AutoSizeColumnsMode = 
            DataGridViewAutoSizeColumnsMode.AllCells;
        DataGridView1.AllowUserToAddRows = false;
        DataGridView1.AllowUserToDeleteRows = false;

        // The below autogenerated column is removed so 
        // a DataGridViewComboboxColumn could be used instead.
        DataGridView1.Columns.Remove(ColumnName.TitleOfCourtesy.ToString());
        DataGridView1.Columns.Remove(ColumnName.ReportsTo.ToString());

        AddLinkColumn();
        AddComboBoxColumns();
        AddButtonColumn();
        AddOutOfOfficeColumn();
    }

    private void AddComboBoxColumns()
    {
        DataGridViewComboBoxColumn comboboxColumn;
        comboboxColumn = CreateComboBoxColumn();
        SetAlternateChoicesUsingDataSource(comboboxColumn);
        comboboxColumn.HeaderText = "TitleOfCourtesy (via DataSource property)";
        DataGridView1.Columns.Insert(0, comboboxColumn);

        comboboxColumn = CreateComboBoxColumn();
        SetAlternateChoicesUsingItems(comboboxColumn);
        comboboxColumn.HeaderText = "TitleOfCourtesy (via Items property)";
        // Tack this example column onto the end.
        DataGridView1.Columns.Add(comboboxColumn);
    }

    private void AddLinkColumn()
    {
        DataGridViewLinkColumn links = new DataGridViewLinkColumn();

        links.UseColumnTextForLinkValue = true;
        links.HeaderText = ColumnName.ReportsTo.ToString();
        links.DataPropertyName = ColumnName.ReportsTo.ToString();
        links.ActiveLinkColor = Color.White;
        links.LinkBehavior = LinkBehavior.SystemDefault;
        links.LinkColor = Color.Blue;
        links.TrackVisitedState = true;
        links.VisitedLinkColor = Color.YellowGreen;

        DataGridView1.Columns.Add(links);
    }

    private static void SetAlternateChoicesUsingItems(
        DataGridViewComboBoxColumn comboboxColumn)
    {
        comboboxColumn.Items.AddRange("Mr.", "Ms.", "Mrs.", "Dr.");
    }

    private DataGridViewComboBoxColumn CreateComboBoxColumn()
    {
        DataGridViewComboBoxColumn column =
            new DataGridViewComboBoxColumn();
        {
            column.DataPropertyName = ColumnName.TitleOfCourtesy.ToString();
            column.HeaderText = ColumnName.TitleOfCourtesy.ToString();
            column.DropDownWidth = 160;
            column.Width = 90;
            column.MaxDropDownItems = 3;
            column.FlatStyle = FlatStyle.Flat;
        }
        return column;
    }

    private void SetAlternateChoicesUsingDataSource(DataGridViewComboBoxColumn comboboxColumn)
    {
        {
            comboboxColumn.DataSource = RetrieveAlternativeTitles();
            comboboxColumn.ValueMember = ColumnName.TitleOfCourtesy.ToString();
            comboboxColumn.DisplayMember = comboboxColumn.ValueMember;
        }
    }

    private DataTable RetrieveAlternativeTitles()
    {
        return Populate("SELECT distinct TitleOfCourtesy FROM Employees");
    }

    string connectionString =
        "Integrated Security=SSPI;Persist Security Info=False;" +
        "Initial Catalog=Northwind;Data Source=localhost";

    private DataTable Populate(string sqlCommand)
    {
        SqlConnection northwindConnection = new SqlConnection(connectionString);
        northwindConnection.Open();

        SqlCommand command = new SqlCommand(sqlCommand, northwindConnection);
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = command;

        DataTable table = new DataTable();
        table.Locale = System.Globalization.CultureInfo.InvariantCulture;
        adapter.Fill(table);

        return table;
    }

    // Using an enum provides some abstraction between column index
    // and column name along with compile time checking, and gives
    // a handy place to store the column names.
    enum ColumnName
    {
        EmployeeId,
        LastName,
        FirstName,
        Title,
        TitleOfCourtesy,
        BirthDate,
        HireDate,
        Address,
        City,
        Region,
        PostalCode,
        Country,
        HomePhone,
        Extension,
        Photo,
        Notes,
        ReportsTo,
        PhotoPath,
        OutOfOffice
    };

    private void AddButtonColumn()
    {
        DataGridViewButtonColumn buttons = new DataGridViewButtonColumn();
        {
            buttons.HeaderText = "Sales";
            buttons.Text = "Sales";
            buttons.UseColumnTextForButtonValue = true;
            buttons.AutoSizeMode =
                DataGridViewAutoSizeColumnMode.AllCells;
            buttons.FlatStyle = FlatStyle.Standard;
            buttons.CellTemplate.Style.BackColor = Color.Honeydew;
            buttons.DisplayIndex = 0;
        }

        DataGridView1.Columns.Add(buttons);

    }

    private void AddOutOfOfficeColumn()
    {
        DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn();
        {
            column.HeaderText = ColumnName.OutOfOffice.ToString();
            column.Name = ColumnName.OutOfOffice.ToString();
            column.AutoSizeMode = 
                DataGridViewAutoSizeColumnMode.DisplayedCells;
            column.FlatStyle = FlatStyle.Standard;
            column.ThreeState = true;
            column.CellTemplate = new DataGridViewCheckBoxCell();
            column.CellTemplate.Style.BackColor = Color.Beige;
        }

        DataGridView1.Columns.Insert(0, column);
    }

    private void PopulateSales(DataGridViewCellEventArgs buttonClick)
    {

        string employeeId = DataGridView1.Rows[buttonClick.RowIndex]
            .Cells[ColumnName.EmployeeId.ToString()].Value.ToString();
        DataGridView2.DataSource = Populate("SELECT * FROM Orders WHERE EmployeeId = " + employeeId);
    }

    #region "SQL Error handling"
    private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs anError)
    {

        MessageBox.Show("Error happened " + anError.Context.ToString());

        if (anError.Context == DataGridViewDataErrorContexts.Commit)
        {
            MessageBox.Show("Commit error");
        }
        if (anError.Context == DataGridViewDataErrorContexts.CurrentCellChange)
        {
            MessageBox.Show("Cell change");
        }
        if (anError.Context == DataGridViewDataErrorContexts.Parsing)
        {
            MessageBox.Show("parsing error");
        }
        if (anError.Context == DataGridViewDataErrorContexts.LeaveControl)
        {
            MessageBox.Show("leave control error");
        }

        if ((anError.Exception) is ConstraintException)
        {
            DataGridView view = (DataGridView)sender;
            view.Rows[anError.RowIndex].ErrorText = "an error";
            view.Rows[anError.RowIndex].Cells[anError.ColumnIndex].ErrorText = "an error";

            anError.ThrowException = false;
        }
    }
    #endregion

    private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

        if (IsANonHeaderLinkCell(e))
        {
            MoveToLinked(e);
        }
        else if (IsANonHeaderButtonCell(e))
        {
            PopulateSales(e);
        }
    }

    private void MoveToLinked(DataGridViewCellEventArgs e)
    {
        string employeeId;
        object value = DataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
        if (value is DBNull) { return; }

        employeeId = value.ToString();
        DataGridViewCell boss = RetrieveSuperiorsLastNameCell(employeeId);
        if (boss != null)
        {
            DataGridView1.CurrentCell = boss;
        }
    }

    private bool IsANonHeaderLinkCell(DataGridViewCellEventArgs cellEvent)
    {
        if (DataGridView1.Columns[cellEvent.ColumnIndex] is
            DataGridViewLinkColumn &&
            cellEvent.RowIndex != -1)
        { return true; }
        else { return false; }
    }

    private bool IsANonHeaderButtonCell(DataGridViewCellEventArgs cellEvent)
    {
        if (DataGridView1.Columns[cellEvent.ColumnIndex] is
            DataGridViewButtonColumn &&
            cellEvent.RowIndex != -1)
        { return true; }
        else { return (false); }
    }

    private DataGridViewCell RetrieveSuperiorsLastNameCell(string employeeId)
    {

        foreach (DataGridViewRow row in DataGridView1.Rows)
        {
            if (row.IsNewRow) { return null; }
            if (row.Cells[ColumnName.EmployeeId.ToString()].Value.ToString().Equals(employeeId))
            {
                return row.Cells[ColumnName.LastName.ToString()];
            }
        }
        return null;
    }

    #region "checkbox state"
    Dictionary<string, bool> inOffice = new Dictionary<string, bool>();
    private void DataGridView1_CellValuePushed(object sender,
        DataGridViewCellValueEventArgs e)
    {
        if (IsCheckBoxColumn(e.ColumnIndex))
        {
            string employeeId = GetKey(e);
            if (!inOffice.ContainsKey(employeeId))
            {
                inOffice.Add(employeeId, (Boolean)e.Value);
            }
            else
            {
                inOffice[employeeId] = (Boolean)e.Value;
            }
        }
    }

    private string GetKey(DataGridViewCellValueEventArgs cell)
    {
        return DataGridView1.Rows[cell.RowIndex].
            Cells[ColumnName.EmployeeId.ToString()].Value.ToString();
    }

    private void DataGridView1_CellValueNeeded(object sender,
        DataGridViewCellValueEventArgs e)
    {

        if (IsCheckBoxColumn(e.ColumnIndex))
        {
            string employeeId = GetKey(e);
            if (!inOffice.ContainsKey(employeeId))
            {
                bool defaultValue = false;
                inOffice.Add(employeeId, defaultValue);
            }

            e.Value = inOffice[employeeId];
        }
    }

    private bool IsCheckBoxColumn(int columnIndex)
    {
        DataGridViewColumn outOfOfficeColumn =
            DataGridView1.Columns[ColumnName.OutOfOffice.ToString()];
        return (DataGridView1.Columns[columnIndex] == outOfOfficeColumn);
    }
    #endregion
}


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ