Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162

    [C#] Editare un elemento di una cella di un DataGridView con style = ComboBox

    Ciao,
    ho la seguente necessità :
    Ho impostato una colonna del DataGridView con style = ComboBox. Lavora bene ma
    a parte la visualizzazione della combo su ogni riga della grid (è il male minore), non
    riesco ad editare l'item della comboBox. Con questa 'limitazione' non posso inserire dei
    nuovi elementi. Devo settare qualcosa? O devo impostare un meccanismo con la
    visualizzazione di una combo esterna alla grid nell'evento OnClick della cella ? Se si,
    cosa che ho già fatto, come faccio a posizionare la comboBox nell'area della cella
    corrente ?
    Grazie in anticipo.
    Ciao, Brainjar

  2. #2
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Dopo svariati tentativi ho optato per la soluzione con una combo esterna.
    La combo è settata non visibile a design-time.
    Posto il codice dell'evento Click sul DataViewGrid che rende visibile la combo e quello
    relativo all'uscita dalla combo che imposta il valore della Cella sottostante.
    codice:
    .....
    this.cboDescrizione.Leave += new System.EventHandler(this.cboDescrizioneLeave);
    .....
    this.grdWPreventivo.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.GrdWPreventivoCellContentClick);
    this.grdWPreventivo.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.GrdWPreventivoCellContentClick);
    .....
    .....
    private void GrdWPreventivoCellContentClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
    {
    	DataGridView grd = this.grdWPreventivo; 
    	Rectangle rect = grd.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);
    	
    	if (e.ColumnIndex==0) {
    		RigaCorrente = e.RowIndex; 
    		blEditing = true;
    		// -------------------------------------
    		// Set combo absolute position
    		// -------------------------------------
    		cboDescrizione.Left = rect.X + grd.Left;
    		cboDescrizione.Top =  rect.Y + grd.Top; 
    		cboDescrizione.BringToFront(); 
    	} else	
    		blEditing = false;
    	// ---------------------------------------
    	// Set combo visible, so can receive focus
    	// ---------------------------------------
    	cboDescrizione.Visible = blEditing;			
    	// -----------------------------------------
    	// Can combo receive Focus() ?
    	// -----------------------------------------
    	if (blEditing) cboDescrizione.Focus();
    }
    
    private void cboDescrizioneLeave(object sender, System.EventArgs e)
    {	
    	// -----------------------------------
    	// Stop editing. Start CellValidating. 
    	// -----------------------------------
    	string valore = cboDescrizione.Text;
    
    	blEditing = false;
    	this.grdWPreventivo.Rows[RigaCorrente].Cells[0].Value = valore;
    	cboDescrizione.SendToBack(); 
    	cboDescrizione.Visible = false ;
    	int i = this.cboDescrizione.FindString(cboDescrizione.Text);
    	if (i==-1)  cboDescrizione.Items.Add(cboDescrizione.Text);
    }
    Riporto le considerazioni generali sul codice postato :
    1) La soluzione proposta non è l'unica possibile.
    2) Non è la più performante ne quella maggiormente ottimizzata.
    3) Rappresenta un ragionevole compromesso tra la semplicità del codice e il
    raggiungimento del risultato.
    4) Nel tempo si potrà scoprire una soluzione migliore, probabilmente già esistente.
    Ciao, Brainjar

  3. #3
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, per editare una combo della gridview bisogna fare cosi (te la propongo in vb.net):
    codice:
    Dim cmb As New DataGridViewComboBoxCell
    cmb = CType(dbGrid.Rows(1).Cells("nome"), DataGridViewComboBoxCell)
    cmb.Items.Add("new item")
    ...
    magari trovi anche maggiori dettagli nella guida..
    Jupy

  4. #4
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Grazie Jupy64.
    La soluzione che ho adottato pur non essendo immediata come credo sia quella che mi
    proponi, mi permette di gestire altre particolarità dell'applicazione.
    Sapevo in partenza che sicuramente c'era più di un metodo per ottenere quanto mi
    necessitava.
    Di nuovo grazie.
    Alla prossaima.
    Ciao, Brainjar

  5. #5
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Grazie Jupy64.
    La soluzione che ho adottato mi permette di gestire agevolmente altre caratteristiche
    dell'applicazione.
    Alla prossima.
    Ciao, Brainjar

  6. #6
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Scusate la ripetizione. Mi si era impallato il sistema.
    Ciao, Brainjar

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.