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

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 143

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 137 138 139 140 141 142 < 143 > 144 145 146 147 148 149 .. 260 >> Следующая

набирая код.
«За кулисами. Visual Studio .NET действительно создает объект DataView, что дает вам второе преимущество. Когда вы работаете с окном Properties, Visual Studio .NET изменяет значения соответствующих свойств объекта DataView. Если вы некорректно задали значение свойства, например сделали опечатку в имени столбца или указали отсутствующий в объекте DataFable столбец, Visual Studio .NET оповестит вас об этом. Хотите — верьте, хотите — нет, но информация в оповещении по-настоящему полезна (рис. 8-2). Если вы сделаете аналогичную ошибку непосредственно в коде, он будет успешно скомпилирован, и ошибка проявится только при запуске приложения.
Рис. 8-2. t ЩОВС.-ЩС-ПНС-, генерируемое Visual Studio
в период разработки при неверном вводе имени столбца
Вопрос. Зачем нужен объект Datrt'h>iv.\!tma&'f!
Ответ. I >(dfiVi>4rM,t»age — это контейнер с объектами DatuVie'.vbeit.hsa которые в целом аналогичны объектам Data\ 'ietr но предоставляют более ограниченную функциональность. Я не могу представить реальной ситуации, когда объект DataViewManager окажется более полезным, чем DataView, и поэтому не рассматриваю его в книге.
ГЛАВА 8 Сортировка,-. .-¦ фильтрация 319
Вопрос. Как мне найти запись в объекте DataView, если поиск должен осуществляться по столбцу, не указанному в свойстве Sort этого объекта?
Ответ. Это довольно распространенная ситуация, возникающая при работе со
снял;.....ыми элементами управления Windows-формы. К сожалению, ни /4iht\ Ъчг.
ни объекты связывания с данными, предоставляемые Windows-формой, не предлагают изящного решения этой проблемы.
у вас есть сетка, связанная с элементом управления DataView, который отображает отсортированные по столбцу е. лип г\ сведения о клиентах. Вам требуется предоставить возможность поиск клиентов по другому например ContactName. На рис. 8-3 показан пример такой формы.
ШХЯШШШШШШШШШЙШШШШЯШШ ¦
(l ами
- _ 1.1л tiVrs ii. i= я 9 л j-1 'и i
одам Э=йиа i-dfr>:-z Less
-ij* '¦ 1
ER+F4
MiUU


iii "ми i i ^mm №д|
- Г H M Pjui ¦a* ^^ма"» &uil
Г>.г* Ddwe j- ¦ лгн
Iftmm L Г-Х.Г* л
FKUP P iotoi- днамнМ ?-1 Й*М2

¦ Mn
«*] 5554773

?S5-Ei&.
EjCMAK = I!T5 ;-„->• FtWbtf
ЫЙ- Ранг 'tew lb$ 32-IS
Firtind
Рис. 8 .4. Отсортированные по столбцу Country сведения о клиентах
Наша задача — выбра гь соответствующую запись в сетке. На рис. 8-3 зг:ачп ше поля ContactName текущего ряда - Aria Cruz, а поля Country - Brazil.
Нам нужно определить порядковый номер требуемой записи в объекте DataVieu\ т. е. найти эту запись в объекте DataTable. Это можно сделать двумя способами:
посредством метода Select объекта DataTable или метода Find объекта DataView. Остановимся на последнем.
Нам требуется объект DataView, значение поля Sort которого — ContactName. Затем с помощью метода Find удается определить порядковый номер нужной записи в объекте DataView. Зная номер записи, мы обратимся к нужному объекту DataRow и узнаем значение поля Country, Вот фрагмент кода, который все это осуществляет:
Visual Basic .NET
Dim As New Data""abie{ "Custrnjers")
Dim vueByCountry As New DataView(tbl)
vueByCountry.Sort = "Country"
Dim vueByContactName As New DataView(tbl)
vueByContactName.Sort = "ContactName"
Dim intlndexCountry, intlndexCantactName As Integer
320
Часть Автономная работа с данными: объект DataSet модели ADO.NET
¦liitlnclexCuoritry = -1
iritliidexContactName = vueeyContactNasia.FindC'Aria Cruz")
Dim row As DataRow = vueByContactName(intlndexContactName). Row
Dim strCountry As String = row("Country")
Visual C# .NET
DataTable = new DataTable("Customers");
UataView vue8yCoontry = new DataView(tbl); vueByCountry.Sort = "Country"; DataViewvueByContactName = new DataView(tbl); vueByContactName. Sort = "ContactNaroe"; int intlndexCountry, intlndexContactName; intlndexCountry = -1;
intlndexContactName = vueByContactName. Find("Aria Cruz"); Dataflow row = vueByCorrtactNane[intlndexContactName], Sow; string strCountry = row["Country"];
Это самая простая часть. Д.иьпк все усложняется.
0<и:д\>н|ц|||'| этап — вызов метода Find объекта uata\¦'/с/г. содержащего отсор-•m|>4ii;iinii.n- по столбцу Country сиедегп)я о клиентах. Тем не менее несколько записей могут иметь одинаковое значение поля Country, так что это далеко не конец.
'{! unco; hi поля Country не обязательно уникальны, и поэтому имеет смысл воспользоваться методом F/ndRows объекта DataView. Метод GetRoirs возвращает массив объектов DtHaRnitVie/e. Один из элементов этого массива представляет нужную нам запись, однако определить порядковый номер объекта DaMRotrVh'ir iicixrtM'w.-iiii. и поэтому метод FindRows п.1л: к сожалению, не поможет.
Еще один вариант — целиком сканировать объект DataView, пока не отыщется нужная Код для такого поиска очень прост, но неэффективен.
На рис. 8-3 показано несколько записей, имеющих одинаковое с нужной нам записью значение поля Country. Есть еще один недостаток использования метода DtitaViewFinds данной ситуации - нет гарантии, что возвращенный порядковый помер соответствует первой записи объекта DataView, удовлетворяющей критерию поиска.
Предыдущая << 1 .. 137 138 139 140 141 142 < 143 > 144 145 146 147 148 149 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100