2012-11-06 6 views
5

Ich möchte bestimmte Zeilen in einem Ultragrid abhängig von einer booleschen Sync-Eigenschaft in der Zeile deaktiviert werden. Ich habe an zwei verschiedene Lösungen gedacht, aber beide haben nicht geklappt.Infragistics Ultragrid Wie kann ich eine Zeile abhängig von einer Eigenschaft deaktivieren

1) Importieren Sie die Sync-Eigenschaft in die Activation-Eigenschaft der Zeile. Ist das möglich?

2) In einem Ereignis wie dem InitializeRow-Ereignis des Rasters finden Sie heraus, was die Sync-Eigenschaft ist und deaktivieren Sie die Zeile, wenn es auf True festgelegt ist. Diese Methode funktioniert, abgesehen davon, dass dann, wenn dem Raster weitere Zeilen hinzugefügt werden und das Raster dann gespeichert wird, die Daten sich selbst neu ordnen, sodass die deaktivierte Zeile nicht die richtigen Daten enthält. Daher brauche ich eine Möglichkeit zu wissen, wann dies passiert, damit ich die richtigen Zeilen danach wieder durchgehen und deaktivieren kann.

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

Könnten Sie den Code in das InitializeRow Ereignis zeigen? – Steve

+0

Hallo Steve, ich habe den obigen Code hinzugefügt, der gut funktioniert. Das Problem ist, dass nach dem Klicken auf "Save" (Speichern) ein Code vorhanden ist, der die Reihenfolge der Datenelemente aktualisiert und ändert und leider das InitializeRow-Ereignis nicht erneut auslöst. – Jim

+0

Die Dokumente für [InitializeRow] (http://www.infragistics.com/help/topic/5CCF90C4-EEF6-4F4D-A979-B6F505F93318) erklären, dass dieses Ereignis auch aufgerufen werden sollte, wenn Sie die Werte einer einzelnen Zelle ändern. Daher gibt es nach dem Speicherbefehl etwas, das verhindert, dass dieses Ereignis ausgelöst wird. Auch hier könnte der Code nach dem Speicherbefehl hilfreich sein. – Steve

Antwort

5

Sie können es auch in Ihrer eigenen Funktion schreiben. Ich hoffe unten Lösung könnte Ihnen helfen.

Erstellen Sie ein Windows-Formular "test" .. und Drag/Drop eine "ultragird" in diesem Fenster Form, wie unten dargestellt .. enter image description here

eine Form Ladefunktion "test_Load" erstellen .. und versuchen Code unten .. Ihre Zeilen mit sync "false" ist deaktiviert ..

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; 
      } 
     } 
    } 
Verwandte Themen