none
DataGridView – Comment afficher des données indépendants avec des données liés RRS feed

  • Discussion générale

  • Les données que vous affichez dans le contrôle DataGridView proviennent d’habitude d'une source de données quelconque, mais peut-être vous souhaitez afficher une colonne de données qui ne provient pas de la source de données. Ce type de colonne est appelé une colonne non liée. Des colonnes indépendantes peuvent prendre de nombreuses formes. Vous pouvez utiliser le mode virtuel pour afficher des données supplémentaires avec des données liées.

    L'exemple de code suivant montre comment créer une colonne de cellules de la case à cocher indépendante pour permettre à l'utilisateur de sélectionner des enregistrements de la base de données à traiter. La grille est mise en mode virtuel et répond aux événements nécessaires. Les enregistrements sélectionnés sont conservés par ID dans un dictionnaire pour autoriser l'utilisateur à trier le contenu mais éviter toutefois la perdre des lignes récupérés.

     

    private System.Collections.Generic.Dictionary<int, bool> checkState;
    private void Form1_Load(object sender, EventArgs e)
    {
      dataGridView1.AutoGenerateColumns = false;
      dataGridView1.DataSource = customerOrdersBindingSource;
     
      // The check box column will be virtual.
      dataGridView1.VirtualMode = true;
      dataGridView1.Columns.Insert(0, new DataGridViewCheckBoxColumn());
     
      // Initialize the dictionary that contains the boolean check state.
      checkState = new Dictionary<int, bool>();
    }
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
      // Update the status bar when the cell value changes.
      if (e.ColumnIndex == 0 && e.RowIndex != -1)
      {
        // Get the orderID from the OrderID column.
        int orderID = (int)dataGridView1.Rows[e.RowIndex].Cells["OrderID"].Value;
        checkState[orderID] = (bool)dataGridView1.Rows[e.RowIndex].Cells[0].Value;
     
    }
     
    private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
    {
      // Handle the notification that the value for a cell in the virtual column
      // is needed. Get the value from the dictionary if the key exists.
     
      if (e.ColumnIndex == 0)
      {
        int orderID = (int)dataGridView1.Rows[e.RowIndex].Cells["OrderID"].Value;
        if (checkState.ContainsKey(orderID))
        {
          e.Value = checkState[orderID];
        }
        else
          e.Value = false;
      }
     
    }
     
    private void dataGridView1_CellValuePushed(object sender, DataGridViewCellValueEventArgs e)
    {
      // Handle the notification that the value for a cell in the virtual column
      // needs to be pushed back to the dictionary.
     
      if (e.ColumnIndex == 0)
      {
        // Get the orderID from the OrderID column.
        int orderID = (int)dataGridView1.Rows[e.RowIndex].Cells["OrderID"].Value;
     
        // Add or update the checked value to the dictionary depending on if the 
        // key (orderID) already exists.
        if (!checkState.ContainsKey(orderID))
        {
          checkState.Add(orderID, (bool)e.Value);
        }
        else
          checkState[orderID] = (bool)e.Value;
      }
    }
    

     

     

     

     

    Pour plusieurs questions sur la bibliothèque de classes .NET, visitez Foire aux Questions  -  Bibliothèque de classes .NET Framework

     

    vendredi 30 juillet 2010 12:28