Для программной установки отбора в форме списка предназначено свойство Filter объекта V8ListDataSource.
Свойство Filter является коллекцией FilterCollection, в которой содержатся элементы типа V8Filter.
Каждый элемент V8Filter задает одно условие отбора, связанное с одним полем таблицы.
Класс V8Filter содержит следующие свойства и методы:
Наименование свойства | Тип свойства | Описание |
---|---|---|
FieldName | string | Возвращает или задает имя поля, по которому устанавливается отбор |
Condition | V8FilterCondition | Возвращает или задает условие отбора (равно, не равно, больше, меньше и т.д.) |
Value1 | object | Возвращает или задает значение, с которым произодится сравнение |
ValueType1 | V8TypeInfo | Возвращает или задает тип значения (тип свойства Value1) |
Presentation1 | string | Возвращает или задает представление значения (свойства Value1) |
Value2 | object | Возвращает или задает второе значение, с которым производится сравнение (в случае использования интервала в качестве условия сравнения) |
ValueType2 | V8TypeInfo | Возвращает или задает тип второго значения (тип свойства Value2) |
Presentation2 | string | Возвращает или задает представление второго значения (свойства Value2) |
Disabled | bool | Возвращает или задает доступность условия отбора |
Visible | bool | Возвращает или задает видимость условия отбора |
Checked | bool | Возвращает или задает использование условия отбора |
Наименование метода | Описание |
---|---|
ToString | Возвращает строковое представление условия отбора. Используется для передачи в качестве параметра в формах приложения |
Parse | Создает объект V8Filter по его строковому представлению |
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo[V8Consts.kBooleanTypeString];
V8Filter filter = new V8Filter();
filter.FieldName = "Проведен";
filter.ValueType1 = typeInfo;
filter.Value1 = true;
filter.Presentatiion1 = typeInfo.EnumPresentations[1];
filter.Condition = V8FilterCondition.Equal;
filter.Checked = true;
filter.Disabled = false;
filter.Visible = true;
ListDataSource.Filter["Проведен"] = filter;
}
}
В этом примере переменная keyRef содержит ссылку на элемент справочника "Склады".
Копировать в буфер обменаprivate void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo["СправочникСсылка_Склады"];
V8Filter filter = new V8Filter();
filter.FieldName = "Склад";
filter.ValueType1 = typeInfo;
filter.Value1 = keyRef;
filter.Presentatiion1 = V8WebUtil.FormatValue(keyRef, "", ListDataSource.Metadata,
ListDataSource.TableInfo, "Склад");
filter.Condition = V8FilterCondition.Equal;
filter.Checked = true;
filter.Disabled = false;
filter.Visible = true;
ListDataSource.Filter["Склад"] = filter;
}
}
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo["ПеречислениеСсылка_ВидыСкладов"];
V8Filter filter = new V8Filter();
filter.FieldName = "ВидСклада";
filter.ValueType1 = typeInfo;
filter.Value1 = _1C.V8.ПеречислениеСсылка_ВидыСкладов.НеавтоматизированнаяТорговаяТочка;
filter.Presentatiion1 =
V8.GetEnumPresentation(_1C.V8.ПеречислениеСсылка_ВидыСкладов.НеавтоматизированнаяТорговаяТочка,
ListDataSource.Metadata);
filter.Condition = V8FilterCondition.Equal;
filter.Checked = true;
filter.Disabled = false;
filter.Visible = true;
ListDataSource.Filter["ВидСклада"] = filter;
}
}
В этих примерах также продемонстрированы различные способы получения представлений значений.
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo[V8Consts.kDateType];
V8Filter filter = new V8Filter();
filter.FieldName = "Дата";
filter.ValueType1 = typeInfo;
filter.Value1 = new DateTime(2005, 1, 1);
filter.Presentatiion1 = V8WebUtil.FormatValue(filter.Value1, "", ListDataSource.Metadata,
ListDataSource.TableInfo, "Дата");
filter.ValueType2 = typeInfo;
filter.Value2 = new DateTime(2006, 1, 1);
filter.Presentatiion2 = V8WebUtil.FormatValue(filter.Value2, "", ListDataSource.Metadata,
ListDataSource.TableInfo, "Дата");
filter.Condition = V8FilterCondition.IntervalGreatEqLess;
filter.Checked = true;
filter.Disabled = false;
filter.Visible = true;
ListDataSource.Filter["Дата"] = filter;
}
}
Отборы, заданные через свойство Filter объекта V8ListDataSource, редактируются при помощи авто-формы DefaultFilterForm.
Для управления видимостью и доступностью изменения предназначены свойства Visible и Disabled объекта V8Filter.
Пример 1: установить отбор в списке по полю "Склад" и запретить пользователю изменять этот отбор (переменная keyRef содержит ссылку на элемент справочника "Склады").
Копировать в буфер обменаprivate void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo["СправочникСсылка_Склады"];
V8Filter filter = new V8Filter();
filter.FieldName = "Склад";
filter.ValueType1 = typeInfo;
filter.Value1 = keyRef;
filter.Presentatiion1 = V8WebUtil.FormatValue(keyRef, "", ListDataSource.Metadata,
ListDataSource.TableInfo, "Склад");
filter.Condition = V8FilterCondition.Equal;
filter.Checked = true;
filter.Disabled = true;
filter.Visible = true;
ListDataSource.Filter["Склад"] = filter;
}
}
Пример 2: скрыть из формы отборов отбор по полю "Склад".
Копировать в буфер обменаprivate void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
ListDataSource.Filter["Склад"].Visible = false;
}
}
ВАЖНО! Если у объекта V8Filter свойство Checked=false, то все настройки условия отбора, кроме значения свойств Visible и Disabled, не сохраняются. |
ПРИМЕЧАНИЕ Коллекция Filter объекта V8ListDataSource сохраняется во ViewState. Поэтому заполнение этой коллекции при каждом postback'е не требуется. |