9_Березина_DataTable_Base

advertisement
Классы из пространства имен 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" />
Download