Item Changes
ItemChanging
Manipulate the behavior of the control before the change has taken place. This method can be found in wndProjektPainter (Shortcut: PP)
ItemChanging can return different values:
ItemChangingResult.Continue: validates the changing and continues
ItemChangingResult.Reject: does not reject the value, keeps the wrong one and does not continue until a valid value is given
ItemChangingResult.RejectAndContinue: reject the changes and continues; keeps the previous value of tha variable;
Best practice: use RejectAndContinue.
public override ItemChangingResult ItemChanging(UIElement container, FrameworkElement element, object selectedItem, object newValue, object oldValue)
{
if (element == tbTerminJahr)
{
var newJahr = newValue.ToInt(0);
if (newJahr < 1900 || newJahr > 2100)
{
LoggerSink.PushMessage(this, "Ungültiges Jahr", Severity.Warning);
return ItemChangingResult.Reject;
}
}
else if (element == tbTerminKW)
{
var newKw = newValue.ToInt(0);
if (newKw < 1 || newKw > 54)
{
LoggerSink.PushMessage(this, "Ungültige KW", Severity.Warning);
return ItemChangingResult.Reject;
}
}
return base.ItemChanging(container, element, selectedItem, newValue, oldValue);
}
ItemChanged
Behavior after changing value of an control.
Since v16 ItemChanged took over the functionality of ItemSearched.
Best-practice: Group your code by selecting the container (DataPanel, DataGrid), followed by the control from the container (TextBox, DataGrid Column).
public override void ItemChanged(UIElement container, FrameworkElement element, object selectedItem, object newValue, object oldValue)
{
base.ItemChanged(container, element, selectedItem, newValue, oldValue);
if (container == dpKopf) //DataPanel
{
if (element == tbsBetriebsauftrag) //TextBoxSearch
{
var babTyp = tbsBetriebsauftrag.ResultRow["typ"].ToInt(0);
var babNr = tbsBetriebsauftrag.ResultRow["nr"].ToInt(0);
if (babTyp > 0 && babNr > 0)
{
//Clearview, Retrieve and Set Focus
NewRueckmeldung(babTyp, babNr);
}
}
else if (element == tbsMitarbeiter)
{
var mitarbId = newValue.ToStringNN();
if (!mitarbId.IsNullOrEmpty())
{
ChangeMitarbeiter(mitarbId);
}
}
}
else if (container == dgZeit) //DataGrid
{
if (element.In(dgtbMenge, dgtbAusschuss)) //DataGrid Column
{
RefreshMenge();
}
else if (element == dgtbIstzeit)
{
RefreshRueckmRes();
RefreshEffektivZeit();
}
}
}
Example where in ItemChanged event we can access the searched row/rows via searchControl.ResultRow/ExtraRows:
public override void ItemChanged(UIElement container, FrameworkElement element, object selectedItem, object newValue, object oldValue)
{
base.ItemChanged(container, element, selectedItem, newValue, oldValue);
//...
else if (element == tbsAfoArbgkatNr)
{
RetrieveAFOArbgkatMulti((xTextBoxSearch)element);
}
else if (element == tbsAfoArbgkatDG)
{
xTextBoxSearch tbsArbgkat = ((DxTextBoxSearchColumn)element).ActiveTextBoxSearch;
RetrieveAFOArbgkatMulti(tbsArbgkat);
}
}
public virtual void RetrieveAFOArbgkatMulti(xTextBoxSearch searchControl)
{
if (searchControl == null) return;
if (dxgarbpl_afo.SelectedRow == null) return;
dsProdKontrolPlan.arbpl_afoRow selectedRow = dxgarbpl_afo.SelectedRow;
BusObj.RetrieveAFOArbgkatMulti(selectedRow, searchControl.ResultRow, searchControl.ExtraRows);
dpAplAfo.SetFocus(tbAfoBez1.Name);
this.RefreshMdePanel();
}
Last updated