Для этого я бы создал класс StringList для определения вашего списка и значений, а затем использовал бы атрибуты для управления поведением.
Во-первых, класс List (расчески)
public class Combs
{
//build string list attribute
public class ListAttribute : PXStringListAttribute
{
public ListAttribute() : base(new[]
{
Pair(Comb, "Comb"),
Pair(Other, "Other")
})
{ }
}
//declare constant values
public const string Comb = "Comb";
public const string Other = "Other";
//build constant for values you want to compare in BQL
public class other : PX.Data.BQL.BqlString.Constant<other>
{
public other() : base(Other) {; }
}
}
Далее идут свойства / атрибуты:
#region UsrComb
[PXDBString]
[Combs.List]
[PXUIField(DisplayName = "Comb")]
public virtual string UsrComb { get; set; }
public abstract class usrComb : PX.Data.BQL.BqlBool.Field<usrComb> { }
#endregion
#region UsrText
[PXDBString]
[PXUIField(DisplayName = "Text")]
//pxdefault is required if you have a PXUIRequired attribute.
[PXDefault(PersistingCheck = PXPersistingCheck.Nothing)]
[PXUIRequired(typeof(Where<usrComb, Equal<Combs.other>>))]
[PXUIVisible(typeof(Where<usrComb, Equal<Combs.other>>))]
[PXUIEnabled(typeof(Where<usrComb, Equal<Combs.other>>))]
public virtual String UsrText { get; set; }
public abstract class usrText : PX.Data.BQL.BqlString.Field<usrText> { }
#endregion
PXUIRequired / Enabled / Visible атрибуты, затем проверьте, чтобы увидетьесли список равен константе.Вы можете использовать любую комбинацию значений.
Поместите свои поля на экран и убедитесь, что для UsrComb для CommitChanges установлено значение True.Вы измените значение на «Другое», и оно затем отобразит текстовое поле и скроет его при возврате.
Если вы хотите очистить значение после того, как выпадающий список изменен на другой, вы можете использовать следующеекод:
protected virtual void CROpportunity_UsrComb_FieldUpdating(PXCache sender, PXFieldUpdatingEventArgs e)
{
if (e.NewValue == null)
return;
string Comb = (string)e.NewValue;
if (Comb != Combs.Other)
sender.SetValueExt<CROpportunityExt.usrText>(e.Row, "");
}