powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Привязка Navigator к фильтрованным данным
20 сообщений из 20, страница 1 из 1
Привязка Navigator к фильтрованным данным
    #38521902
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В свойстве BindingSource у элемента Navigator стоит значение contractsBindingSource.
И навигатор прекрасно работает, в частности удаляет записи.
А вот когда применяю фильт к записям вот так
Код: c#
1.
2.
3.
            DataView dv = new DataView(dataSet_Export.Tables["Contracts"]);
            GridView_Contracts.DataSource = dv;
            dv.RowFilter = " [Client] like '%" + Client + @"%'";


ощущение что навигатор стоит на строчках которых не видно ..... и соответственно кнопка удалить не удаляет строку текущую.
Что не так??? Подскажите
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38521935
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306В свойстве BindingSource у элемента Navigator стоит значение contractsBindingSource.
И навигатор прекрасно работает, в частности удаляет записи.
А вот когда применяю фильт к записям вот так
Код: c#
1.
2.
3.
            DataView dv = new DataView(dataSet_Export.Tables["Contracts"]);
            GridView_Contracts.DataSource = dv;
            dv.RowFilter = " [Client] like '%" + Client + @"%'";


ощущение что навигатор стоит на строчках которых не видно ..... и соответственно кнопка удалить не удаляет строку текущую.
Что не так??? ПодскажитеНафигатор и грид должны ссылаться на один и тот же источник данных... А у Вас получается, что у навигатора - свой источник данных, у грида - свой.

К тому же если contractsBindingSource это действительно BindingSource, подключеный к таблице "Contracts", то и гриду, и навигатору именно его и указываете в качестве источника данных, и у него есть свойство Filter, через которое делается все то же самое, что и Вы "ручками"...
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38521948
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,

1.грид и навигатор должны быть привязаны к одному источнику данных, тогда они будут синхронизированы
для этого и нужен BindingSource
2.Фильтрацию в DataTable можно производить через BindingSource.Filter
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38523848
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mv,

спасибо за разъяснение. исправила. все работает.
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38527761
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простую фильтрацию получилось сделать, по значению столбца

Код: c#
1.
waybillsBindingSource.Filter = "CONVERT(Id, 'System.Int32')="+Id_Bill;


А можно ли сделать фильтрацию данных по такому условию :
Код: c#
1.
waybillsBindingSource.Filter = "CONVERT(Id, 'System.Int32') in (select Waybill from BillsWaybills Where Bills="+Id_Bill+")";



Выдается ошибка "Синтаксическая ошибка: отсутствует операнд после оператора "Waybill"."
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38527851
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tanya_0306, на биндинсорсе можно филтр поставить весьма простенький. Для таких навороченых, как у тебя, фильтр необходимо ставить еще на этапе загрузки данных в таблицу, что б данные не соответствующие фильтру даже не грузились, т.е. таблеадаптеру (или что там используешь для вгрузки данных).
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38528077
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IApple,

Я подключила ДатаГрид к источнику данных и автоматически создался биндинсорсе и таблеадаптер. А фильтр на таблеадаптер как прописать? перед строчкой
Код: c#
1.
2.
   this.waybillsTableAdapter.Fill(this.dataSet_Export.Waybills);
         
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38528177
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
adapter.SelectCommand = "select .. from... WHERE...";
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38528247
Tanya_0306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris,

не совсем понятно ...
Код: c#
1.
this.waybillsTableAdapter.SelectCommand = "select .. from... WHERE...";


подчеркивает SelectCommand
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38528347
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tanya_0306,

При построении типизированного датасета, есть возможность задать несколько различных команд на получение данных,в результате адаптер сгенерится с соответствующими методами, например:
Код: c#
1.
2.
DataTable mytable = this.waybillsTableAdapter.GetById(id);
//есть возможность генерить Get и Fill методы
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38528466
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris
Код: c#
1.
adapter.SelectCommand = "select .. from... WHERE...";

"Не взлетит" (с)
adapter.SelectCommand - не строка...
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38528521
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvPallaris
Код: c#
1.
adapter.SelectCommand = "select .. from... WHERE...";

"Не взлетит" (с)
adapter.SelectCommand - не строка...

Ну да, но идея понятна
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38531805
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tanya_0306,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
        // это генерится автоматом
        public virtual int Fill(DataTable dataTable)
        {
            int returnValue = -1;
            this.Adapter.SelectCommand = this.CommandCollection[0];
            if ((this.ClearBeforeFill == true)) dataTable.Clear();
            this.PrepareParameters(0);
            try
            {
                returnValue = this.Adapter.Fill(dataTable);
            }
            finally
            {
                this.Connection.Close();
            }
            return returnValue;
        }
        // это я дописываю сам, чтоб иметь возможность загружать с нужным фильтром и в нужном порядке
        public virtual int FillByStrFLTR(DataTable dataTable, string FLTR, string SORT)
        {
            this.Adapter.SelectCommand = this.CommandCollection[0].Clone();
            if (!string.IsNullOrEmpty(FLTR))
                this.Adapter.SelectCommand.CommandText = this.Adapter.SelectCommand.CommandText
                        + "\r\nWHERE " + FLTR;
            if (!string.IsNullOrEmpty(SORT))
                this.Adapter.SelectCommand.CommandText = this.Adapter.SelectCommand.CommandText
                        + "\r\nORDER BY " + SORT;
            if ((this.ClearBeforeFill == true)) dataTable.Clear(); 
            int returnValue = -1;
            try
            {
                returnValue = this.Adapter.Fill(dataTable);
            }
            catch (System.Exception e)
            {
                YNBox(this.Adapter.SelectCommand.CommandText + "\r\n error: " + e.ToString());
            }
            return returnValue;
        }


Рассчитано на то, что в this.CommandCollection[0] - лежит строка типа "SELECT * FROM XTable" без условий и фильтра (такие по умолчанию и генерятся студией).
Работать будет только в случае корректного с точки зрения SQL строки условия и строки сортировки !!!
Так делать очень не рекомендуют умники, которые не представляют системы, где бы возможно было всегда корректно указать фильтр в виде строки.
Их метод предполагает только метод с передачей набора параметров, каждый из которых действительно легко проверить, чтоб условие фильтра опиралось на него (GetById(id) к примеру). Но в таком варианте универсального фильтра не может быть в принципе. В конце обсуждения будет вывод о пагубности использования типизированных (и вообще любых) датасетов и адаптеров к ним и впаривание какого-либо ОРМ, как панацеи.

Кроме того дописывать метод к автогенерному коду еще тот геморой...
В реальности я не дописываю ничего и не пользуюсь совсем автогенерными табляадаптерами, а имею свой вариант адаптера с нужными особенностями типа FillByStrFLTR и все адаптеры просто наследую от него.
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38532082
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38535420
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation, и который из дополнительных фильтров в предложенном вами, именно универсален - FillByCity или FillByCompanyName ?
Или, может, оба ? 8)
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38535485
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IApplepation, и который из дополнительных фильтров в предложенном вами, именно универсален - FillByCity или FillByCompanyName ?
Или, может, оба ? 8)

причём здесь универсальность?
в типизированном датасете датаадаптер реализует конкретную функциональность для работы с конкретной таблицей
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38537614
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation, да вам и велосипеды не по уму... или чукча не читатель ? Я не писал об универсальных адаптерах. Я писал об универсальном фильтре, который может оперировать условием фильтрации, относящимся к любому из полей таблицы или их комбинации.
Для таблицы из 10 полей по-вашему методу необходимо настрочить 10 перегруженых методов FillByХХХ, только для того чтобы иметь возможность фильтра по ОДНОМУ из полей в отдельности. Если же необходимо фильтр с условием по комбинации 2-х полей - их станет 100 !!! Задолбаетесь писать case для выбора метода, которым надо грузить данные 8)
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38537622
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IAppleРаботать будет только в случае корректного с точки зрения SQL строки условия и строки сортировки !!!

А если будут GROUP BY и HAVING? Еще желательно UNION не использовать в запросе.

Говорят, не очень производительный вариант, но по-моему действенный, это написать один запрос
Код: c#
1.
2.
3.
4.
select .. from ..
WHERE
(field1 = @val1 or @filterByField1 = false) and
(field2 = @val2 or @filterByField2 = false) and...



Совсем уж произвольные условия, конечно, не составишь.
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38537766
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris, это конешно вариант, но сами пишете, что подозрения есть о производительности. Но дело не в этом. Если условием нужно не равенство переменной чему-то а что-то другое типа field1>10 ?..
...
Рейтинг: 0 / 0
Привязка Navigator к фильтрованным данным
    #38537783
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS. GROUP & HAVING - эта уж не просто так запрос, эта скажем так, READ ONLY зпрос. GROUP по ключевому полю-идентификатору не имеет смысла. А если у вас нету в данных идентификатора, то к такой записи ни к чему иметь адаптер с методами для INSERT, UPDATE, DELETE. Аналогично при UNION. Для таких извратов можно юзать отдельные адаптеры с "извращенными" выборками. Нужен ли для них универсальный фильтр - не факт. Хотя по аналогии, можно допилить метод FillByStrFLTR и под GROUP.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Привязка Navigator к фильтрованным данным
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]