Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 356

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 350 351 352 353 354 355 < 356 > 357 358 359 360 361 362 .. 404 >> Следующая


Следующая строка кода выполняет за нас очень большой объем работы — в ней осуществляется вызов метода ReadXmio на объект DataSet. Этот метод считывает весь XML-файл в обьект DataSet, а также создает таблицы н строки, необходимые для точного отображения не только самих данных, но и их структуры.

ADO.NET формирует две таблицы; первая из них (таблица 0) состоит всего из

одной строки и из одного столбца и содержит вопрос для опроса. Вторая таблица содержит по одной строке на каждый возможный ответ и два столбца — один для текста ответа, а второй для числа голосов, которые этот ответ получил:

. гпуDataSet. ReadXml {myXmlReader); .

Следующая строка выполняет закрытие файла: myXmlReader.Close ();

Остальная часть метода используется для извлечения данных, находящихся внутри набора данных, и переноса их в частные поля класса Poll. Прежде всего необходимо определить количество строк в таблице 1 (помните, что таблицы в наборах данных индексируются с нуля), чтобы узнать, какое количество ответов допускается при данном опросе, а затем сохранить это значение в поле myAnswer-Count класса рои:

fflyArtewerCount = myDataSet.Tables[1].Rows.Count;

Чтобы присвоить значение полю myQuestion (доступ к которому осуществляется через свойство Question класса Poll), мы обращаемся к нулевой таблице и выбираем первый элемент в первой и единственной содержащейся в ней строке. Свойство itemArray возвращает объект типа object, поэтому необходимо воспользоваться методом Tostringo (который предусмотрен в типе object), чтобы преобразовать объект в строку перед присваиванием полю myQuestion:

myQueetion = myDataSet.Tables [0] .Rows[0] . ItemArray [11 .ToStringO;

В следующем блоке кода инициализируется массив myAnswers, предназначенный для хранения возможных ответов, а он наполняется проходом в цикле по всем строкам таблицы 1, в которой содержатся эти ответы. Поскольку мы используем массив с индексом, отсчет которого начинается с единицы (а не с нуля), то при
Практический пример 1 — web-сайт для проведения опросов_____________________________________761

указании размера массива используется выражение myAnswerCount+i, Свойства votes и Answers, описанные в классе poll, также индексируются, начиная с единицы, поскольку такой интерфейс оказывается более понятным для уровня представления, ибо позволяет называть “вопросом I" первый вопрос, а не второй (как это . было бы прн отсчете индекса с нуля), Это субъективное решение автора — вы можете внести изменения в код н сделать индекс массива, изменяющимся с нуля.

Обратите внимание на то, как мы осуществляем доступ к каждому ответу в таблице 1 с перечнем возможных ответов, с помощью прохода в цикле по всем строкам н извлечения каждый раз текста в нулевом столбце:

щу Answers * new string [inyAnswerCount+l]; string answer;

for(int i^Oii<myAnBwerCountii++) ¦

( .

answer = myDataSet .Tables [II .Rows [i].ItemArray [0] .ToStringO; myAnawars[i+1! = answer;

Следующий блок кода практически идентичен предшествующему за исключением того, что на этот раз мы наполняем массив myvotes и используем для этого первый столбец таблицы, Поскольку данный массив содержит в себе значеннн целого типа, то приходится для объекта типа int использовать метод Parse*), который преобразует строку XML-файла в значение целого типа, прежде чем присвоить ее элементу массива myvotee:

nyVotes = new int [nyAnawerCount+1];

tl прибавляем 1, поскольку индекс отсчитывается с 1

string voces;

Eortint i=0;i< nyAnswerCount;i++>

{

votes “ nvDataSet.Tables[1].Rows[i).ItemArray[1],ToString(); nyVotes[i+l] * in1 Parse{votes); ,

В этом конструкторе объект инициализирован таким образом, что полям myQuestion, ntyAnewerCount, myAnswers и myvotes присвоены соответствующие значения, н доступ к этим значениям может быть осуществлен использованием следующих свойств объекта: Question, count, Answers и votes. После создания объект poll остается единственная (на данный момент) возможность вносить изменения в хранящиеся в нем данные, и она заключается в методе voteo, к рассмотрению которого мы переходим.

Очень важно понимать, что прн использовании свойства класса Poll мы, на самом деле, считываем данные не непосредственно нз XML-файла, а нз полей, находящихся внутри класса. Причина, по которой программа устроена именно так, заключается в том, что в этом случае не требуется открывать XML-файл при каждом обращении к какому-либо свойству класса. Такой подход носнт название “кэширования" и позволяет существенно увеличить быстродействие класса,

Метод public void Vote (int answer)

Этот метод принимает в качестве единственного параметра целое значение, которое определяет, какой именно ответ был выбран. Далее он использует это значение, чтобы добавить один голос данному ответу как в поле myvotes класса poll (в кэшированной копии), так и в самом XML-файле.

В первой строке, выполняемой в этом методе, осуществляется проверка значения, которое было передано методу параметром answer. Если это значение либо
Предыдущая << 1 .. 350 351 352 353 354 355 < 356 > 357 358 359 360 361 362 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.