Colonna checkbox in un datagridview

lunedì 04 settembre 2006 - 11.06

paolo973 Profilo | Senior Member

Ho un datagridview riempito con dei dati.

Il datagridview già funziona.

DOMANDA:

Come inserire una colonna checkbox per filtrare dal DatagridView le righe con il check = true?

filippo.monti Profilo | Junior Member

Inserire una cella checkbox per te penso che non sia un problema.

Per filtrare le righe con checkbox = true io faccio così

For Each row As DataGridViewRow In Me.dgvTestateFatt.Rows
if Boolean.Parse(row.Cells("fattura").Value.ToString then
...
End If
Nect

dove:
dgvTestateFatt è il mio datagrid
fattura: è il nome della cella checkbox all'interno del datagrid

Ciao
Filippo

paolo973 Profilo | Senior Member

Parli di cella, io inserisco una colonna checkbox:

private void AggiungiColonnaCheck()
{
DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn();
{
column.HeaderText = "HeaderText";
column.Name = "Name";
column.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
column.FlatStyle = FlatStyle.Standard;
column.ThreeState = false;
column.CellTemplate = new DataGridViewCheckBoxCell();
column.CellTemplate.Style.BackColor = Color.Red;
column.TrueValue = true;
column.FalseValue = false;
}

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

filippo.monti Profilo | Junior Member

Perchè la inserisci da codice e non dal designer?
Filippo

paolo973 Profilo | Senior Member

Questo è l'errore che si ripresenta sempre, anche se la colonna la inserisco in modo visuale:

Riferimento ad un oggetto non impostato su istanza di un oggetto


Tutto funziona se invece prima di filtrare li selezioni tutti e poi li deseleziono.

Sembra manchi una inizializzazione.

filippo.monti Profilo | Junior Member

Attenzione che se il campo non è bindato ad un campo di database il valore iniziale è null quindi o lo inizializzi a runtime o testi il valore null prima di usarlo.
Ciao

Filippo

paolo973 Profilo | Senior Member

Ho la classe userControl1.cs dove ho inserito da designer anche il datagridView con solo una colonna di tipo checkbox.

nel costruttore del userControl1 ho:

per riempire il dataGridView,

dataGridViewF.DataSource = datasource;
dataGridViewF.DataMember = datamember;

per inizializzare i checkbox che ho per ogni riga,

for (int i = 0; i < dataGridViewF.RowCount; i++)
{
dataGridViewF.Rows[i].Cells[0].Value = true;
}

quindi se non erro, istanziando un oggetto usF di tipo userControl1 ho già inizializzato i vari checkbox, invece ottengo:

System.NullReferenceException

Riferimento ad un oggetto non impostato su un istanza di oggetto.

è possibile da designer impostare già un valore al checkbox ?
oppure cosa fare ?

grazie tante

filippo.monti Profilo | Junior Member

Sulla sezione data devi impostare i valori "FalseValue", "IndeterminateValue" e "TrueValue"
Ciao

Filippo

paolo973 Profilo | Senior Member

l'avevo già fatto nel designer, assegnando alla colonna di tipo checked:

treeState = false

FalseValue = false
TrueValue = true

il datagridView che contiene tale colonna si trova in un UserControl,
nel costruttore dell'Usercontrol seleziono tutti i checkedBox e lo verifico
con un MessageBox.Show("valore --> "+dataGridViewF.Rows[i].Cells[0].Value.toString());

e ottengo True, quindi OK.

il problema di presenta nella visualizzazione del datagridView ovvero quando
lo inserisco nel pannello principale

mainPanelG.Controls.Add(istanzadiUserControl);

sempre lo stesso errore:

System.NullreferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto

la riga è dataGridViewF.Rows[i].Cells[0].Value.ToString().

Invece tutto funziona se dopo che il datagridView è apparso a video, seleziono e deseleziono tutto.

come se non ha sentito che ho selezionato tutto e poi deselezionato (per inizializzare) nel costruttore dell'usercontrol che contiene il datagridview

Non capisco




filippo.monti Profilo | Junior Member

Se non sbaglio quindi il problema si presenta in fase di design time.
Dovresti mettere nel costruttore dell'oggetto questo controllo
If Not DesignMode Then
....
Endif
in modo che entri nel codice solo a runtime...
Ciao

Filippo

paolo973 Profilo | Senior Member

ho risolto grazie tante
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5