80 likes | 280 Views
Классы из пространства имен System.Data. В пространство имен System.Data входят классы , поддерживающие клиентскую часть архитектуры ADO.NET . Класс DataSet состоит из набора таблиц DataTable , которые могут содержать данные, полученные из разных источников.
E N D
Классы из пространства имен System.Data • В пространство имен System.Dataвходят классы, поддерживающие клиентскую часть архитектуры ADO.NET. • Класс DataSetсостоит из набора таблиц DataTable, которые могут содержать данные, полученные из разных источников. • Классы DataViewи DataViewManagerиспользуются для представлений таблицы, классы DataRowи DataColumn- для строк и столбцов таблицы. • Классы DataRelation, Constraint, ForeignKeyConstraintи UniqueConstraintиспользуютсядля описания связей между таблицами и ограничений для столбцов. • В пространстве имен System.Dataтакже определены делегаты для обработчиков событий, классы исключений и перечисления.
Класс DataTable • Класс DataTable описывает таблицу данных и содержит коллекции строк (объектов DataRow ) и столбцов (DataColumn). • Коллекция столбцов определяет схему (schema) таблицы. • Строки таблицы состоят из полей, отвечающих схеме таблицы. • Свойства Rows и Columns дают доступ к коллекции строк и столбцов таблицы: public DataRowCollection Rows {get;} public DataColumnCollection Columns {get;} • В коллекциях определены индексаторы, причем доступ к элементам коллекций возможен как по номеру, так и по имени объекта. • Открытые конструкторы класса DataTable DataTable(); DataTable( stringtableName ); • После создания объекта DataTable с использованием открытых конструкторов класса он не имеет схемы . • Чтобы определить схему таблицы DataTable, необходимо создать объекты DataColumn и добавить их к коллекции Columns таблицы.
КлассDataColumn • При создании столбцов DataColumnиспользуется конструктор класса или одна из перегруженных версий метода Add класса DataColumnCollection. • Некоторые конструкторы класса DataColumn DataColumn(); DataColumn( stringcolumnName ); DataColumn( stringcolumnName, TypedataType ); • В приведенном фрагменте кода создается таблица с именем “Sample_DataTable”, в которую добавляются столбцы.Для каждого столбца задается имя и тип данных в столбце. public Data_5() {tbl = new DataTable("Sample_DataTable"); tbl.Columns.Add("String_Column", typeof(string)); tbl.Columns.Add("Double_Column", typeof(double)); tbl.Columns.Add("Bool_Column", typeof(bool)); tbl.Columns.Add("DateTime_Column", typeof(DateTime)); tbl.Columns.Add("Point_Column", typeof(Point)); tbl.Columns.Add("Color_Column", typeof(Color)); tbl.Columns.Add("DataItem_3_Column", typeof(DataItem_3)); AddDefaults(); }
КлассDataRow • В таблице DataTableданные хранятся в виде строк – объектов типа DataRow. Класс DataRow не имеет открытых конструкторов. • Ссылку на новую строку в таблице можно получить как возвращаемое значение метода NewRow класса DataTable. DataRow NewRow(); • Строка DataRow добавляется к коллекции строк таблицы Rowsпри вызове метода Add класса DataRowCollection. voidAdd( DataRowrow ); virtualDataRowAdd( object[] values ); • Доступ к отдельным полям (столбцам) строки таблицы дают индексаторы, которые принимают как параметр номер или имя столбца. objectthis[ stringcolumnName ] {get; set;} objectthis[ DataColumncolumn ] {get; set;} objectthis[ intcolumnIndex ] {get; set;}
Редактирование данных таблицы • Класс DataTable поддерживает средства для восстановления (rollback) исходных значений, которые хранились в таблице до ее изменения (в том числе программного). • Для каждой строки таблицы поддерживается четыре версии: • Current– измененные значения; • Original – значения до изменения; • Proposed– существует только в процессе редактирования ; • Default– одна из предыдущих версий (зависит от состояния строки). • Только после вызова одного из следующих методов класса DataTable, изменения в таблице либо принимаются, либо восстанавливаются исходные значения. publicvoidAcceptChanges(); publicvirtualvoidRejectChanges(); • Можно получить значения полей для разных версий строки с помощью определенных в классе DataRow индексаторов, указав соответствующее значение перечисления DataRowVersion . Среди значений перечисления есть Current и Original. objectthis[ DataColumncolumn, DataRowVersionversion ] {get;} objectthis[ stringcolumnName, DataRowVersionversion ] {get;} objectthis[ intcolumnIndex, DataRowVersionversion ] {get;}
Класс DataView • Класс DataViewдает возможность создать несколько представлений (view) для одного и того же множества данных из объекта DataTable, используя различные критерии сортировки и/или фильтрации. • Класс DataViewвсегда связан с объектом DataTable. • С каждым объектом DataTable всегда связан объект DataView - представление по умолчанию. Ссылку на него можно получить через свойство класса DataTable: publicDataViewDefaultView {get;} • Другие представления для таблицы можно создать с помощью конструкторов класса DataView. public DataView(); public DataView(DataTable);
Привязка к DataTable • В примере представление по умолчаниюDefaultViewдля объекта DataTableиспользуется как источник данных для элемента управления ListBoxи как контекст данных окна приложения: public partial class Window1 : Window {Data_5 data = new Data_5(); private void Window_Loaded(object sender, RoutedEventArgs e) {this.DataContext = data.Table.DefaultView; listBox1.ItemsSource = data.Table.DefaultView; listBox1.IsSynchronizedWithCurrentItem = true; } […code…] } • В разметке выполнена привязка элементов текущей строки таблицы к элементам управления CheckBoxиTextBox.Имя соответствующего столбца указывается в свойстве Pathпривязки. • Для элементов TextBlockвыполнена привязка к свойствам Date, Brushи DoubleValue типа DataItem_3, значения которого находятся в столбце с именем DataItem_3_Column. <TextBox Text="{Binding Path=DateTime_Column}“ Grid.Column="1" Margin="10,140,10,0 " /> <CheckBoxIsChecked="{Binding Path=Bool_Column}" Content="{Binding Path=Bool_Column}" Grid.Column="1" Margin="10,175,10,0" Height="25" VerticalAlignment="Top"/> <TextBox Text="{Binding Path=DataItem_3_Column}" Grid.Column="1"Margin="10,210,10,0"/> <TextBlock Text="{Binding Path=DataItem_3_Column.Date}" Foreground="{Binding Path=DataItem_3_Column.Brush}" Margin="50,305,10,0" /> <TextBlock Text="{Binding Path=DataItem_3_Column.DoubleValue}" Grid.Column="1" />