Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Поиск данных




Сортировка данных

 

Свойство Sort предназначено для вывода записей в порядке возрастания (ascending, ASC) или убывания (descending, DESC) по значениям заданного поля. В принципе, элемент DataGridView сам по себе поддерживает сортировку - достаточно просто щелкнуть по заголовку поля. Однако это требует действий от пользователя, тогда как объект DataView может предоставлять данные уже в готовом виде.

Удалим значение свойства RowFilter, в поле свойства Sort введем «Фамилия ASC» (результат на рис. 128):

DataView myDataView = new DataView(bDTur_firmSQL2DataSet.Туристы);
myDataView.Sort = "Фамилия, Имя ASC";
dataGridView2.DataSource = myDataView;

Рис. 128. Сортировка данных по полю «Фамилия»

 

Технология ADO.NET предоставляет значительные возможности для поиска данных - такие объекты, как DataSet, DataTable, содержат специализированные методы для быстрого решения этой задачи. Свойство RowFilter объекта DataView может применяться для создания простого и эффективного поиска.

Запускаем Visual Studio 2008 и создаем новый проект типа Windows Forms Control Library (рис. 129).

Внешний вид формы в режиме дизайна представлен на рисунке 130. Перейдем к коду. В конструкторе формы отключаем доступность текстового поля и привязываем обработчик события CheckedChanged для элемента CheckBox:

public FindCheckBox() {
InitializeComponent();
txtColumnValue.Enabled = false;
chbForSearching.CheckedChanged += new EventHandler(chbForSearching_CheckedChanged);
}

В классе формы создаем обработчик события CheckedChanged для CheckBox и определяем действия для значений текстового поля, надписи и элемента CheckBox.

Рис. 129. Выбор шаблона Windows Forms Control Library

Рис. 130. Форма компонента в режиме дизайна

private void chbForSearching_CheckedChanged(object sender, EventArgs e) {
txtColumnValue.Enabled = chbForSearching.Checked;
}
[Category("Appearance"),
Description("Название поля, по которому будет осуществляться поиск")]
public string ColumnName
{
get {return lblColumnName.Text;}
set {lblColumnName.Text = value;}
}
[Category("Appearance"), Description(" Ключевое слово для поиска")]
public string ColumnValue
{
get {return txtColumnValue.Text;}
set {txtColumnValue.Text = value;}
}
[Category("Appearance"), Description("Включение поиска по заданному полю")]
public bool SearchEnabled
{
get {return chbForSearching.Checked;}
set {chbForSearching.Checked = value;}
}

Свойства ColumnName, ColumnValue и SearchEnabled будут свойствами композитного элемента управления, которые будут отображаться в его окне Properties. В квадратных скобках указан атрибут для помещения свойства в заданную группу и описание, выводимое на информационную панель.

Откомпилируем приложение и закроем его.

Создадим новое Windows-приложение, которое будет использовать созданный компонент. Расположим на форме следующие элементы управления: Panel, свойству Dock которого установим значение Left, Splitter и DataGridView (свойству Dock последнего устанавливаем значение Fill). Добавим созданный компонент в окно ToolBox и перетаскиваем на панель формы из окна Toolbox четыре копии элемента FindCheckBox. Вид формы приложения в режиме дизайна приведен на рисунке 131.

Обратите внимание, что в окне Properties, при групповом расположении, свойство ColumnName находится в группе Appearance. На информационную панель выводится описание этого свойства на русском языке. Именно эти параметры были указаны при создании композитного элемента. Добавим обработчик кнопки «Поиск»:

private void btnSearch_Click(object sender, System.EventArgs e) {
try {
FindCustomers();
}
catch(Exception ex) {
MessageBox.Show(ex. Message);
}
}

Рис. 131. Расположение элементов на форме

В классе формы создаем метод FindCustomers, в котором будет осуществляться обработка и который вызывается в обработчике кнопки «Поиск»:

private void FindCustomers() {
//Создаем экземпляр filteringFields класса ArrayList
ArrayList filteringFields = new ArrayList();
//Если элемент fcbCustomerID доступен для поиска
if (fcbCustomerID.SearchEnabled)
//Добавляем в массив filteringFields значение текстового поля ColumnValue
filteringFields.Add("CustomerID LIKE \'" + fcbCustomerID.ColumnValue + "%\'");
if (fcbCompanyName.SearchEnabled)
filteringFields.Add("CompanyName LIKE \'" + fcbCompanyName.ColumnValue + "%\'");
if (fcbContactName.SearchEnabled)
filteringFields.Add("ContactName LIKE \'" + fcbContactName.ColumnValue + "%\'");
if (fcbPhone.SearchEnabled)
filteringFields.Add("Phone LIKE \'" + fcbPhone.ColumnValue + "%\'");
string filter = "";
//Комбинируем введенные в текстовые поля значения.
//Для объединения используем логический оператор "ИЛИ"
if (filteringFields.Count == 1)
filter = filteringFields[0].ToString();
else if (filteringFields.Count > 1) {
for(int i = 0; i < filteringFields.Count - 1; i++)
filter += filteringFields[i].ToString() + " OR ";
//Для объединения полей в запросе используем логический оператор "И"
// for(int i = 0; i < filteringFields.Count - 1; i++)
// filter += filteringFields[i].ToString() + " AND ";
filter += filteringFields[filteringFields.Count - 1].ToString();
}
//Создаем экземпляр dvSearch класса DataView
DataView dvSearch = new DataView(dsCustomers1.Customers);
//Передаем свойству RowFilter объекта DataView скомбинированное значение filter
dvSearch.RowFilter = filter;
dataGrid1.DataSource = dvSearch;
}

Как видно из приведенного кода, для объединения условий, накладываемых на поля, используется логический оператор «ИЛИ». Путем некоторого усложнения кода и созданного компонента для поиска можно создать возможность одновременного использования операторов «И» и «ИЛИ» Запустим приложение.

Первый поисковый запрос будет запрашивать всего одно поле (рис. 132).

Рис. 132. Простой поисковый запрос

Усложним запрос: зададим условие на два поля (рис. 133).

Рис. 133. Более сложный поисковый запрос

 




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 406; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.