Изграждане на графичен потребителски интерфейс с Windows Forms



страница14/16
Дата27.09.2016
Размер1.09 Mb.
#10985
1   ...   8   9   10   11   12   13   14   15   16

Master-Details навигация


Навигацията "главен/подчинен" (master-details) отразява взаимоотноше­ния от тип едно към много (например един регион има много области). В ADO.NET, DataSet обектите поддържат релации от тип "главен/подчинен". За целта се из­ползват DataRelation обектите в DataSet.

В Windows Forms се поддържа навигация "главен/подчинен". За илюстри­раме работата с нея, нека разгледаме един пример: Имаме DataSet, съдържащ две таблици – едната съдържа имена на държави, а другата –имена на градове и те са свързани помежду си така, че на всяка държава от първата таблица съответстват определени градове от втората таблица:



Тогава можем да използваме две DataGrid контроли – първата визуали­зи­ра­ща държавите, а втората визуализираща градовете, съответ­ства­щи на текущо избраната държава от първата контрола. За целта контролите се свър­зват с един и същ DataSet. На главната контрола се задава за източ­ник на данни главната таблица. На подчинената кон­тро­ла се задава за източ­ник на данни релацията на таблицата:



// Bind the master grid to the master table

DataGridCountries.DataSource = datasetCountriesAndTowns;

DataGridCountries.DataMember = "Countries";
// Bind the detail grid to the relationship

DataGridTowns.DataSource = datasetCountriesAndTowns;

DataGridTowns.DataMember = "Countries.CountriesTowns";

Master-Details навигация – пример


Настоящият пример илюстрира възможностите за реализация на Master-Details навигация, базирана на DataSet компонентата от ADO.NET и сложното свързване на списъчни контроли в Windows Forms. В примера ще използваме базата данни Northwind – една от стандартните демон­страционни бази в MS SQL Server.

Ще създадем приложение, което има в главната си форма две контроли – ListBox, който показва региони (от таблицата Region от базата данни) и DataGrid, който показва областите за всеки регион (от таблицата Territories от базата данни).



Ето и стъпките за изграждане на нашето приложение:

  1. Стартираме VS.NET и създаваме нов Windows Forms проект.

  2. Задаваме на главната форма име MainForm и заглавие "Master-Detail Demo". Променяме и името на файла от Form1.cs на MainForm.cs.

  3. В прозорецът Server Explorer от VS.NET намираме демонстрацион­ната база данни Northwind на MS SQL Server. Щракваме върху таблицата Region и след това натискайки клавиш Ctrl, щракваме върху таблицата Territories. След като сме маркирали едновре­менно и двете таблици, ги извличаме върху формата. Ако прозоре­цът Server Explorer не е отворен, можем да го отворим като изберем View | Server Explorer.

  4. Windows Forms редакторът автоматично създава за нас един SqlConnection и два SqlDataAdapter компонента. Променяме техните имена съответно на sqlConneciton, sqlDataAdapterRegion и sqlDataAdapterTerritories:



  1. От менюто Data избираме Generate Dataset… В появилия се прозо­рец указваме, че искаме да създадем нов DataSet и задаваме за име DataSetNorthwind. Поставяме отметки и пред двете таблици и натискаме бутона [OK] за да създадем новия DataSet. Променяме името на появилия се в редактора DataSet на dataSetNorthwind.



  1. Щракваме с десния бутон върху dataSetNorthwind в редактора и от появилото се контекстно меню избираме View Schema… Отваря се файлът DataSetNorthwind.xsd - виждаме XSD схемата на DataSet-a, генериран на базата на таблиците Region и Territories.



  1. От Toolbox извличаме един Relation обект и го пускаме върху таблицата Territories. В появилия се прозорец се уверяваме, че за Parent element e избрана таблицата Region, а за Child element таблицата Territories и натискаме бутона OK. Така дефинирахме релация тип Master-Details между таблиците Region и Territories.



  1. Добавяме във формата един ListBox с име ListBoxRegions. На свойството DataSource задаваме стойност dataSetNorthwind, а на свойствата DisplayMember и ValueMember – съответно стойности Region.RegionDescription и Region.RegionID.

  2. Добавяме във формата един DataGrid с име DataGridTerritories. Задаваме на свойствата DataSource и DataMember съответно стой­ности dataSetNorthwind и Region.RegionTerritories.

  3. Дефинираме стил с име dataGridTableStyleTerritories за табли­цата Territories. В колекцията му GridColumnStyles добавяме стилове за полетата TerritoryID и TerritoryDescription, като указваме, че тези колони трябва да са със заглавия съответно код и област.

  4. Добавяме код, който при зареждане на формата (при събитие Load) зарежда DataSet обекта от базата данни чрез DataAdapter компо­нентите за двете таблици (Region и Territories):

    private void MainForm_Load(object sender, System.EventArgs e)

    {

    sqlDataAdapterRegion.Fill(dataSetNorthwind);



    sqlDataAdapterTerritories.Fill(dataSetNorthwind);

    }


  5. Приложението е готово и можем да го стартираме и тестваме:


Релации "много към много"


DataSet и DataGrid не поддържат релации тип "много към много". Такъв тип релации могат да бъдат сведени до Master-Details чрез добавяне на изглед в базата данни. Нека примерно имаме база данни съдържаща таблици Courses и Students и таблица StudentsCourses, осъществяваща връзка между тях.

За да сведем тази релация към Master-Details, можем да създадем изглед в базата данни:



CREATE VIEW View_StudentsCourses AS

SELECT StudentId, StudentName, CourseId, CourseName

FROM Students, Courses, StudentsCourses

WHERE Students.StudentsId = StudentsCourses.StudentId

AND Courses.CourseId = StudentsCourses.CourseId


След като сме създали изгледа, можем да сведем релацията до релация Master-Details между таблицата Courses и новосъздаденият изглед:

Аналогично на предходния пример можем да работим с таблиците, които са вече във взаимоотношение "главен/подчинен":







Сподели с приятели:
1   ...   8   9   10   11   12   13   14   15   16




©obuch.info 2024
отнасят до администрацията

    Начална страница