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;

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.

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:

The full implementation of this example can be found in PKP.

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