2012-11-06 9 views
5

Vorrei che determinate righe in Ultragrid fossero disabilitate a seconda della proprietà di sincronizzazione booleana nella riga. Ho pensato a due soluzioni diverse ma nessuna ha funzionato.Infragistics Ultragrid Come disabilitare una riga in base a una proprietà

1) Database della proprietà Sync alla proprietà Activation della riga. È possibile?

2) In un evento come l'evento InitializeRow della griglia, individuare la proprietà Sync e disabilitare la riga se è impostata su true. Questo metodo funziona a prescindere dall'aggiunta di altre righe alla griglia e la griglia viene quindi salvata, i dati vengono riordinati in modo che la riga disabilitata non contenga i dati corretti. Quindi ho bisogno di un modo per sapere quando questo accadrà in modo che possa passare e disabilitare di nuovo le righe giuste in seguito.

private void ultraGrid1_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e) 
{ 
    e.Row.Activation = Infragistics.Win.UltraWinGrid.Activation.AllowEdit; 
    if (e.Row.Cells[grdBoundGrip.DisplayLayout.Bands[0].Columns["Sync"]].Value != null && (bool)e.Row.Cells[grdBoundGrip.DisplayLayout.Bands[0].Columns["Sync"]].Value) 
      e.Row.Activation = Infragistics.Win.UltraWinGrid.Activation.Disabled; 
} 
+2

Potrebbe mostrare il codice nell'evento InitializeRow? – Steve

+0

Ciao Steve, ho aggiunto il codice sopra il quale funziona perfettamente. Il problema è che dopo aver fatto clic su Salva, c'è un codice che aggiorna e modifica l'ordine dei dati e, sfortunatamente, questo non attiva di nuovo l'evento InitializeRow. – Jim

+0

I documenti per [InitializeRow] (http://www.infragistics.com/help/topic/5CCF90C4-EEF6-4F4D-A979-B6F505F93318) spiegano che questo evento dovrebbe essere chiamato anche se si cambiano i valori di una singola cella. Quindi c'è qualcosa dopo il comando save che impedisce a questo evento di sparare. Di nuovo, il codice dopo il comando di salvataggio potrebbe essere d'aiuto. – Steve

risposta

5

È inoltre possibile scrivere nella propria funzione. Spero che la soluzione qui sotto possa aiutarti.

Creare un Windows Form "test" .. e il drag/drop di un "ultragird" in quella forma le finestre come mostrato di seguito .. enter image description here

creare una funzione di caricamento form "test_Load" .. e cercano qui sotto code .. le righe con sync "false" è disabilitata ..

private void test_Load(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("Name", typeof(string)); 
     dt.Columns.Add("Address", typeof(string)); 
     dt.Columns.Add("Sync", typeof(string)); 
     dt.Rows.Add(new object[] {"John","United States","False" }); 
     dt.Rows.Add(new object[] { "Xing", "China", "True" }); 
     dt.Rows.Add(new object[] { "Ram", "Nepal", "True" }); 
     dt.Rows.Add(new object[] { "Germany", "Thomas", "False" }); 
     dt.Rows.Add(new object[] { "Pedrik", "Russia", "True" }); 

     ultraGrid1.DataSource = dt; 
     ultraGrid1.DataBind(); 

     DisableRowsWithSyncOff(dt.Rows.Count); 

    } 
    private void DisableRowsWithSyncOff(int _rowcount) 
    { 
     for (int i = 0; i < _rowcount; i++) 
     {     
      if (!Convert.ToBoolean(ultraGrid1.Rows[i].Cells["Sync"].Value.ToString())) 
      {      
       ultraGrid1.Rows[i].Activation = Infragistics.Win.UltraWinGrid.Activation.Disabled; 
      } 
     } 
    }