Классы из пространства имен System.Data В пространство имен System.Data входят классы, поддерживающие клиентскую часть архитектуры ADO.NET. Класс DataSet состоит из набора таблиц DataTable, которые могут содержать данные, полученные из разных источников. Классы DataView и DataViewManager используются для представлений таблицы, классы DataRow и DataColumn - для строк и столбцов таблицы. Object DataRow MarshalByValueComponent DataSet DataTable DataView DataViewManager DataColumn Constraint DataRelation ForeignKeyConstraint UniqueConstraint Классы DataRelation, Constraint, ForeignKeyConstraint и UniqueConstraint используются для описания связей между таблицами и ограничений для столбцов. В пространстве имен System.Data также определены делегаты для обработчиков событий, классы исключений и перечисления. Класс DataTable Класс DataTable описывает таблицу данных и содержит коллекции строк (объектов DataRow ) и столбцов (DataColumn). Коллекция столбцов определяет схему (schema) таблицы. Строки таблицы состоят из полей, отвечающих схеме таблицы. Свойства Rows и Columns дают доступ к коллекции строк и столбцов таблицы: public DataRowCollection Rows {get;} public DataColumnCollection Columns {get;} В коллекциях определены индексаторы, причем доступ к элементам коллекций возможен как по номеру, так и по имени объекта. Открытые конструкторы класса DataTable DataTable(); DataTable( string tableName ); После создания объекта DataTable с использованием открытых конструкторов класса он не имеет схемы . Чтобы определить схему таблицы DataTable, необходимо создать объекты DataColumn и добавить их к коллекции Columns таблицы. Класс DataColumn При создании столбцов DataColumn используется конструктор класса или одна из перегруженных версий метода Add класса DataColumnCollection. Некоторые конструкторы класса DataColumn DataColumn(); DataColumn( string columnName ); DataColumn( string columnName, Type dataType ); В приведенном фрагменте кода создается таблица с именем “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. void Add( DataRow row ); virtual DataRow Add( object[] values ); Доступ к отдельным полям (столбцам) строки таблицы дают индексаторы, которые принимают как параметр номер или имя столбца. object this[ string columnName ] {get; set;} object this[ DataColumn column ] {get; set;} object this[ int columnIndex ] {get; set;} Редактирование данных таблицы Класс DataTable поддерживает средства для восстановления (rollback) исходных значений, которые хранились в таблице до ее изменения (в том числе программного). Для каждой строки таблицы поддерживается четыре версии: • Current – измененные значения; • Original – значения до изменения; • Proposed – существует только в процессе редактирования ; • Default – одна из предыдущих версий (зависит от состояния строки). Только после вызова одного из следующих методов класса DataTable, изменения в таблице либо принимаются, либо восстанавливаются исходные значения. public void AcceptChanges(); public virtual void RejectChanges(); Можно получить значения полей для разных версий строки с помощью определенных в классе DataRow индексаторов, указав соответствующее значение перечисления DataRowVersion . Среди значений перечисления есть Current и Original. object this[ DataColumn column, DataRowVersion version ] {get;} object this[ string columnName, DataRowVersion version ] {get;} object this[ int columnIndex, DataRowVersion version ] {get;} Класс DataView Класс DataView дает возможность создать несколько представлений (view) для одного и того же множества данных из объекта DataTable, используя различные критерии сортировки и/или фильтрации. Класс DataView всегда связан с объектом DataTable. С каждым объектом DataTable всегда связан объект DataView - представление по умолчанию. Ссылку на него можно получить через свойство класса DataTable: public DataView DefaultView {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 " /> <CheckBox IsChecked="{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" />