Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 262

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 256 257 258 259 260 261 < 262 > 263 264 265 266 267 268 .. 320 >> Следующая

I
try
f
InventoryTable.Rows[int.ParseftxtRemove.Text))]. DeleteO: i nventoryTable.AcceptChangesi);
}
catch(Exception ex) {
MessageBox.Show(ex,Message):
}
Метод Del можно было ґ».іі, наверное, назвать MarkedAsDeietabie О, поскольку при его вызове реального удаления строки не происходит. Вместо этого столбец лишь помечается как подлежащий удалению, а само удаление происходит при вызове метода OataTable.AcceptChangesO. Пока AcceptChangesО не вызван, мы можем даже восстановить удаленную строку:
// Помечаем строку как подлежащую удалению, а потом возвращаем ее к жизни protected void btnRemoveRow_Click (object sender. System. EventArgs e)
{
і nventoryTable.RowsQtxtRemove.Text. ToInt32()1. Delete{): // Что-то делаем
648 Глава 13 'Доступ к данным при помощи ADO.NET
// Возвращаем исходное состояние строки - значение RowState InventoryTable.RejectChangesO :)
Применение фильтров и порядка сортировки для DataTable
Очень часто возникает необходимость получить подборку данных таблицы, основываясь на каком-либо критерии отбора (фильтре). Например, предположим, что в нашей таблице нам потребовалось извлечь только строки, относящиеся к автомобилям определенной модели (фильтр по значению столбца Make). В этой ситуации мы можем использовать метод DataTabl е. SeI ect(). Еще раз обновим графический интерфейс нашего приложения, чтобы получить возможность выводить данные только об автомобилях выбранной нами модели (рис. 13.11).
г' г ,it Data Table
Нчі^ГівгеГеІЛі
Gel these makes:
[BMW
Inventory
CeIO [Maftfj Cofcu ' PetName
1000 BMW-" Gleen Списку
imn Yuflc White Try-
1020 Jeep Tan
1030 Caaven Rnk Pan inducer
1040 BMW pm Soup Gie Fred
1050 BMW Black Buddha
Remove row tt
Рис. 1311. Используем фильтр для отбора строк
Для метода Select!) предусмотрено множество перегруженных вариантов. Чаще всего методу SeI ect О передается параметр, который представляет условие для отбора строк. Например, в нашем случае для обработчика события Cl і Ck кнопки отбора записей можно использовать следующий код:
protected void btnGetMakes_Cllck !object sender. System.EventArgs e)
{
,// Создаем фильтр для отбора, основываясь на значении, введенной пользователей string filterStr - "Make-"' + txtMake.Text +.....;
Il Находим все строки, соответств>юиіие нашему условию DataRowL] makes = inventor/Table.Select(filterStr);
(I А теперь выводим информацию о найденных строках if(makes.Length = = 0)
MessageBox.ShowOSorr-y. no cars.,.". Selection error!");
else
(
Создаем объект DataTable 649
string strMake * null:
for(int і = О; і <makes. Length; 1++)
{
DataRow temp = makes[i];
strMake += temp ["Pet Name"]. ToSt ring () + "\n";
}
MessageBox.ShowCstrMake, txtMake.Text + " types(s):");
І
Вначале мы создали текстовую строку, содержащую критерии отбора. Если бы пользователь ввел в текстовом поле BMW, то условие поиска выглядело бы как 'BMW'. Затем мы передали это условие поиска методу SeiectO и получили в ответ массив объектов DataRow. При этом каждому из этих объектов соответствовала с і р< ка, удовлетворяющая условию поиска (рис.
Списку ¦ ¦ &С**із Ь і .
Рис. 13.12. Отобранные при помощи фильтра данные
Условие поиска может содержать в себе любое количество операторов. Папріі -мер, если бы нам потребовалось найти все строки со значением Сзг ID бол ы і ты, чем .1030, то мы могли бы использовать следующий код:
// Выводин прозвища всех машин с CarID больше 1030 DataRow[] properIDs: string newFilterStr = "CarID > '1G30'": properIDs = inventoryTabl е. Se lectt newFilterStr): string strIDs = null;
for Ш i = 0: 1 < Grose-IDs.tenqtn; 1++) I
DataRow temp - properIDsfi ]:
strIDs += temp ["PetName"]. ToStringO + " is ID " + temp["ID'] + "\n":
]
>%ssageBox.Show(strIDs. "Pet names of Cars where ID > Hii!l">:
To, что должно получиться в результате выполнения программы, представлено нарис. 13.13.
I Pet names of tan

euddha y, io ioso
MeI fe IO 1O6O
г-д-.т-islD U-~0
.. ...
Рис. 13.13. Отбираем диапазон данных
650 Глава 13 • Доступ к данным при помощи ADO.NET
Условия поиска формулируются при помощи стандартного синтаксиса SQL. Чтобы не быть голословными, предположим, что нам нужно упорядочить возвращаемые методом ecU) данные по прозвищу (в алфавитном порядке). В терминах SQL это значит, что нам необходимо провести сортировку по столбцу PetName. Ничего особо сложного нам делать не придется, поскольку для метода SelectO предусмотрен перегруженный вариант и на такой случай:
makes = іrwentoryTablє.Select{fіUerStr. " Petiten«-):
Результаты запроса будут возвращены в упорядоченном виде (рис. 13.14).
ІГПГЖ*"'
Buddha Fred
PeIn Inducer
Рис. 13.14. Упорядоченные данные
Если мы хотим, чтобы значения были упорядочены по убыванию, запрос можно переписать следующим образом;
// Возвращаем результаты в убывающем порядке
makes = inventoryTable.Select(fllterStr. "PetName DESC");
Формально говоря, условия сортировки задаются путем указания имен столбцов, после которых может следовать ключевое слово ASC (от ascending, сортировка по возрастанию - она используется по умолчанию) или DESC (от descending, сортировка по убыванию). Если есть необходимость провести сортировку сразу по нескольким столбцам, названия этих столбцов можно перечислить через запятую.
Предыдущая << 1 .. 256 257 258 259 260 261 < 262 > 263 264 265 266 267 268 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100