Для відображення набору значень необхідно використовувати прив'язку з множинним значенням. Прив'язуваний набір значень повинен міститися в об'єкті, здатному зберігати колекції значень (наприклад, об'єкти ArrayList, Hashtable і ін.).
Кожен елемент, що підтримує можливість множинної прив'язки, містить наступний набір властивостей:
DataSource | Об'єкт, що містить прив'язувані дані. |
DataSourcelD | Властивість, яка містить ідентифікатор об'єкту, що використовується для підключення до джерела даних. На відміну від DataSource, значення DataSourceID можна встановити в режимі дизайну на етапі розробки додатка. |
DataTextField | Містить найменування стовпця (для рядка) таблиці або властивість (для об'єкту) елементу даних, що включає значення, що відображується на екрані. |
DataTextFormatString | Містить необов'язковий рядок форматування, вживаний для відображення даних. |
DataValueField | Містить унікальний ідентифікатор або поле первинного ключа, яке використовується для витягання даних, пов'язаних з вибираним користувачем елементом. |
Принципи використання всіх спискових елементів, здатних відображувати зв'язані дані, однаковий. Для прив'язки такого елементу до джерела даних необхідно встановити значення властивостей DataSource і DataTextField.
|
|
У наступному прикладі на сторінці розміщено два елементи - DropDownList1 і ListBox1, які пов'язані з одним і тим же джерелом даних - як таке виступає таблиця "Товари":
protected void Page_Load (object sender, EventArgs| e){ string strCon = WebConfigurationManager.ConnectionStrings ["Test_Db"].ConnectionString; string sqlString = "SELECT Кодтовара,НазваТовара,ціна FROM Товари"; SqlConnection sqlCon = new SqlConnection(strCon|); SqlDataAdapter da = new SqlDataAdapter(sqlString,sqlCon); DataSet ds = new DataSet(); da.Fill(ds, "Goods|"); DropDownList1.DataSource = ds.Tables["Goods"]; DropDownList1.DataTextField = "Наїменованієтовара"; DropDownList1.DataValueField = "Кодтовара"; ListBox1.DataSource = ds.Tables["Goods"]; ListBox1.DataTextField = "НазваТовра"; ListBox1.DataValueField = "Кодтовара"; this.DataBind();}Оскільки об'єкт DataSet може містити багато таблиць, у властивості DataSource необхідно вказати ім'я таблиці, до якої необхідно здійснити прив'язку. Властивість DataTextField містить найменування стовпця таблиці, значення якого відображуватимуться елементом управління. Властивість DataValueField є необов'язковою і в даному випадку позначає те, що при виборі значення в елементі управління значення властивості SelectedItem цього елементу буде встановлено рівним значенню поля "Кодтовара", відповідного вибраному запису. Рахувати вибрані значення елементів можна таким чином:
protected void Button1_Click|(object sender, EventArgs e){ StringBuilder str| = new StringBuilder(); str.Append("У Випадному списку вибраний елемент"); str.Append(DropDownList1|.SelectedItem.Text); str.Append(" йому відповідає значення "); str.Append(DropDownList1|.SelectedValue); str.Append("</br>"); str.Append("У Списку вибрані елементи:</br>"); foreach (ListItem li in ListBox1.Items) { if (li.Selected) { str.Append(li.Text); str.Append(" значення - "); str.Append(li.Value); str.Append("</br>"); } } Label2.Text = str.ToString();}У даному прикладі елемент ListBox1 підтримує можливість вибору відразу декількох елементів (для цього необхідно встановити значення властивості SelectionMode даного елементу рівним Multiple). Читання значення виділеного елементу в списку здійснюється за допомогою властивості SelectedItem. Проте у випадку з ListBox1 дана властивість використовувати не можна, оскільки можливе множинне виділення. Для визначення кожного елементу, виділеного в ListBox1, необхідно застосувати цикл, де відбувається звернення до колекції елементів Items, для кожного з яких є властивість Selected. Якщо значення даної властивості встановлене рівним true, даний елемент виділений і його необхідно відображувати.
|
|
Аналогічний принцип можна застосувати з будь-яким іншим елементом управління, що підтримує множинне виділення елементів.
Окрім використаних спискових елементів, ASP.NET містить також і складніші елементи, здатні прив'язуватися до даних і відображувати їх. До таких елементів відносяться GridView, DetailsView, FormView.
GridView є таблицею, здатною прив'язуватися до даних і відображувати вміст таблиць. Підтримує вибір, редагування, сортування і переміщення по сторінках даних. DetailsView призначений для показу одному запису з таблиці за раз. Підтримує редагування і переміщення по сторінках. FormView практично аналогічний DetailsView, з тією лише різницею, що FormView заснований на шаблонах, і це робить його гнучкішим при відображенні інформації.
Найпотужнішим елементом по кількості можливостей є GridView. Дуже часто його доводиться використовувати для відображення інформації у вигляді таблиці. Для прив'язки GridView до джерела даних необхідно встановити значення властивості DataSource. У наступному прикладі на сторінці розміщений об'єкт GridView, який прив'язується до таблиці "Товари" і відображує її вміст:
protected void Page_Load(object sender, EventArgs e){ string strCon = WebConfigurationManager.ConnectionStrings ["Test_Db"].ConnectionString; string strQuery = "SELECT * FROM| Товари"; SqlConnection sqlCon = new SqlConnection(strCon); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = new SqlCommand(strQuery, sqlCon); da.Fill(ds, "Goods"); GridView1.DataSource = ds.Tables["Goods|"]; this.DataBind();}Показані приклади демонструють способи прив'язки до джерел даних з використанням програмного коду, проте це не єдина можливість здійснити прив'язку елементу управління до джерела даних. Visual Studio 2005 дозволяє здійснити прив'язку з використанням візуальних засобів. Для цих цілей.NET Framework містить декілька елементів управління джерелами даних. Вони розташовані на вкладці Data панелі Toolbox. Серед них такі як:
SqlDataSource - дозволяє підключатися до будь-якого джерела даних, яке має постачальника даних ADO|.NET До таких джерел даних відносяться SQL Server, OLE DB, Oracle та інші.
ObjectDataSource - дозволяє підключатися до призначеного для користувача класу доступу до даних. Цей підхід доцільно застосовувати при побудові великомасштабних і складних застосувань. Докладніше про використання призначених для користувача класів доступу до даних і елемент ObjectDataSource буде розказано в розділі, присвяченому реалізації трирівневої архітектури доступу до даних в ASP.NET
AccessDataSource - дозволяє підключатися до баз даних Microsoft Access.
XmlDataSource - дозволяє підключатися до XML-файлу.
SiteMapDataSource - дозволяє підключатися до файлу Web.Sitemap, що містить опис навігаційної структури Web-приложения.
Для використання елементу управління джерелами даних досить перетягнути його з панелі Toolbox в область Web-сторінки. При цьому він відображується у вигляді сірого прямокутника, що містить усередині найменування елементу управління джерелом даних.