2016-08-23 11 views
1

Ich habe ein Bestellsystem, wo auf dem Bestellbildschirm eine Bestellung eingegeben werden kann. Um dies zu tun, verwendet es eine UltraGrid, wobei jede Zeile eine Bestellung ist. Siehe das Bild unten.Infragistics UltraGrid - Machen Sie einzelne Zellen deaktiviert

enter image description here

Ich weiß, dass, irgendwie ist es möglich, eine ganze Reihe nicht-überschreibbar zu machen, so dass die Daten in Zellen können nicht bearbeitet werden, und die Daten können nicht in leere Zellen eingegeben werden.

Allerdings muss ich alle Zellen so verhalten, bis auf eine, bis diese Zelle Daten enthält. (ZB; alle Zellen mit Ausnahme von "Produktcode" sollten deaktiviert werden und dann zur Bearbeitung zur Verfügung gestellt werden, sobald der Produktcode ausgefüllt wurde). Was ist der Code, den ich dafür brauche?

Ich habe versucht, eine With Anweisung zu verwenden, um die Zellen einzeln auf ReadOnly festzulegen, aber das schien nicht zu funktionieren.

EDIT

ich den Code unten verwendet haben, um einzelne Spalten deaktiviert-Auslösung, aber ich erhalte die Fehlermeldung

Objektverweis gesetzt nicht auf eine Instanz eines Objekts

Kann mir jemand sagen warum?

 If ugProducts.ActiveRow.Cells("Product_Code").Value <> "" Then 
      ugProducts.DisplayLayout.Bands(0).Columns(1).CellActivation = Activation.Disabled 
      ugProducts.DisplayLayout.Bands(0).Columns(2).CellActivation = Activation.Disabled 
      ugProducts.DisplayLayout.Bands(0).Columns(3).CellActivation = Activation.Disabled 
     Else 
     End If 

Danke.

+0

Das erste, was Sie tun sollten, ist die Veränderung '<>' auf '=', wie dies derzeit sie deaktiviert Einstellung, wenn der Wert in 'Product_Code' nicht leer ist. Was passiert, wenn Sie '.ToString' am Ende von' .Value' hinzufügen? – David

+0

@David Danke, das gibt immer noch den gleichen Fehler aber zumindest ist die Zuordnung jetzt korrekt –

Antwort

0

der Ansatz ist richtig: CellActivation ist die richtige Requisite zu setzen.

Aber ich denke, das Problem ist, wenn Sie setzen;)

Sie sprechen nicht darüber, wann. Wenn Sie wollen, dass die Zellen einmal gesetzt sind, ist der richtige "Moment" der InitializeLayout event von UGrid.

In der InitializeLayoutEventArgs finden Sie die .Layout, verwenden Sie dies, um band-column.CellActivation einzustellen.

Wenn Sie stattdessen eine bestimmte Zelle einer bestimmten Zeile steuern möchten, müssen Sie dies in InitializeRow event behandeln und die Aktivierung einer Zelle in der Zeile in der Ereignisanzeige festlegen.

Während, wenn Sie die Aktivierung steuern müssen, wenn der Benutzer Zellenwerte bearbeiten, behandeln Sie es in AfterExitEditMode-Ereignis.

PS: persönlicher Vorschlag, verwenden Sie C# anstelle von VB. klarer, flexibler und kompakter.

Davide

+0

Das wurde hier schon beantwortet, aber trotzdem danke http://stackoverflow.com/a/39105251/6634034 –

Verwandte Themen