Come potrete immaginare non è poi così diverso da come si fa nel controllo DataGrid "standard" del Framework 1.1...

Comunque, cercando come nascondere graficamente una colonna di un controllo DataGrid, sono partito da questo link, How do I hide a column in the .NET Winforms Datagrid?, che si riferisce al controllo Windows Forms, in cui sono fondamentalmente indicati due metodi:

1) Formattare il controllo DataGrid attraverso la proprietà TableStyles.

2) Impostare la proprietà ColumnMapping delle colonne della DataSource come MappingType.Hidden.

Quest'ultimo metodo, estremamente veloce e pratico sulla carta, con il Compact Framework non sembra funzionare (forse a causa del fatto che il controllo DataGrid Compact Framework non supporta i DataSet, anche se ho i miei dubbi che sia questo il motivo...).

In effetti il tutto si sarebbe risolto nello scrivere una riga di codice:

// Inizializzazione DataGrid e DataSource...
//...
// Imposto il ColumnMapping
dataSource.Columns["NomeColonnaDaNascondere"].ColumnMapping 
    = MappingType.Hidden;
dataGrid.DataSource = dataSource;

Occorre quindi procedere obbligatoriamente con il primo metodo, ed applicarsi (poco) di più con il DataGridColumnStyle.

In effetti anche in questo caso il codice si riduce a poche righe:

// Inizializzazione DataSource e DataGrid...
// ...
// Creazione dello stile del controllo DataGrid
DataGridTableStyle tableStyle = new DataGridTableStyle();
tableStyle.MappingName = dataSource.TableName;
// Creazione dello stile PER TUTTE LE COLONNE: 
// le colonne non inizializzate non saranno inserite nella DataGrid
foreach(DataColumn column in dataSource.Columns)
{    
    
string columnName = column.ColumnName;
    DataGridColumnStyle columnStyle = 
new DataGridTextBoxColumn();
    columnStyle.MappingName = columnName;
    columnStyle.HeaderText = columnName;
    columnStyle.NullText = String.Empty;
    
// Nascondo la colonna: presente ma non visibile nella DataGrid
    
if(columnName == "NomeColonnaDaNascondere")
         columnStyle.Width = 0;        
    
else columnStyle.Width = 50;    
    tableStyle.GridColumnStyles.Add(columnStyle);
}                        
dataGrid.TableStyles.Add(tableStyle);        
dataGrid.DataSource = dataSource;    

L'effetto di questo codice è che determinate colonne della DataSource saranno "trasferite" nella DataGrid, ma saranno nascoste all'utente.

 

powered by IMHO 1.3