DataTable은 ADO.NET 라이브러리의 중심 개체입니다. DataTable을 사용하는 다른 개체에는 DataSet 및 DataView가 포함됩니다.
DataTable 개체에 액세스할 때는 조건에 따라 대/소문자가 구분됩니다. 예를 들어, 두 DataTable의 이름이 각각 “mydatatable”과 “Mydatatable”인 경우에는 두 테이블 중 하나를 검색하는 데 사용되는 문자열에서 대/소문자를 구분합니다. 그러나 “mydatatable”은 있고 “Mydatatable”은 없는 경우에는 검색 문자열에서 대/소문자를 구분하지 않습니다. TableName 속성 값은 동일하지만 Namespace 속성 값은 다른 두 개의 DataTable 개체가 DataSet에 포함할 수 있습니다.DataTable 개체 작업에 대한 자세한 내용은 DataTable 만들기을 참조하십시오.
프로그래밍 방식으로 DataTable을 만드는 경우 Columns 속성을 통해 액세스하는 DataColumnCollection에 DataColumn 개체를 추가하여 스키마를 먼저 정의해야 합니다. DataColumn 개체 추가에 대한 자세한 내용은 테이블에 열 추가을 참조하십시오.
DataTable에 행을 추가하려면 먼저 NewRow 메서드를 사용하여 새 DataRow 개체를 반환해야 합니다. NewRow 메서드는 테이블의DataColumnCollection에서 정의된 DataTable의 스키마가 있는 행을 반환합니다. DataTable에는 행을 최대 16,777,216개까지 저장할 수 있습니다. 자세한 내용은 테이블에 데이터 추가을 참조하십시오.
또한 DataTable에는 데이터 무결성을 보장하는 데 사용할 수 있는 Constraint 개체의 컬렉션이 들어 있습니다. 자세한 내용은 테이블에 제약 조건 추가를 참조하십시오.
RowChanged, RowChanging, RowDeleting 및 RowDeleted와 같이 테이블이 변경될 때 이를 확인하는 데 사용할 수 있는 여러 DataTable 이벤트가 있습니다.DataTable과 함께 사용할 수 있는 이벤트에 대한 자세한 내용은 DataTable 이벤트 사용을 참조하십시오.
DataTable의 인스턴스를 만드는 경우 일부 읽기/쓰기 속성이 초기 값으로 설정됩니다. 이러한 값의 목록은 System.Data.DataTable 생성자 항목을 참조하십시오.
다음 예제에서는 두 개의 DataTable 개체와 하나의 DataRelation 개체를 만들고 해당 새 개체를 DataSet에 추가합니다. 그런 다음 해당 테이블을DataGridView 컨트롤에 표시합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
// Put the next line into the Declarations section. private System.Data.DataSet dataSet; private void MakeDataTables() { // Run all of the functions. MakeParentTable(); MakeChildTable(); MakeDataRelation(); BindToDataGrid(); } private void MakeParentTable() { // Create a new DataTable. System.Data.DataTable table = new DataTable("ParentTable"); // Declare variables for DataColumn and DataRow objects. DataColumn column; DataRow row; // Create new DataColumn, set DataType, // ColumnName and add to DataTable. column = new DataColumn(); column.DataType = System.Type.GetType("System.Int32"); column.ColumnName = "id"; column.ReadOnly = true; column.Unique = true; // Add the Column to the DataColumnCollection. table.Columns.Add(column); // Create second column. column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = "ParentItem"; column.AutoIncrement = false; column.Caption = "ParentItem"; column.ReadOnly = false; column.Unique = false; // Add the column to the table. table.Columns.Add(column); // Make the ID column the primary key column. DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = table.Columns["id"]; table.PrimaryKey = PrimaryKeyColumns; // Instantiate the DataSet variable. dataSet = new DataSet(); // Add the new DataTable to the DataSet. dataSet.Tables.Add(table); // Create three new DataRow objects and add // them to the DataTable for (int i = 0; i<= 2; i++) { row = table.NewRow(); row["id"] = i; row["ParentItem"] = "ParentItem " + i; table.Rows.Add(row); } } private void MakeChildTable() { // Create a new DataTable. DataTable table = new DataTable("childTable"); DataColumn column; DataRow row; // Create first column and add to the DataTable. column = new DataColumn(); column.DataType= System.Type.GetType("System.Int32"); column.ColumnName = "ChildID"; column.AutoIncrement = true; column.Caption = "ID"; column.ReadOnly = true; column.Unique = true; // Add the column to the DataColumnCollection. table.Columns.Add(column); // Create second column. column = new DataColumn(); column.DataType= System.Type.GetType("System.String"); column.ColumnName = "ChildItem"; column.AutoIncrement = false; column.Caption = "ChildItem"; column.ReadOnly = false; column.Unique = false; table.Columns.Add(column); // Create third column. column = new DataColumn(); column.DataType= System.Type.GetType("System.Int32"); column.ColumnName = "ParentID"; column.AutoIncrement = false; column.Caption = "ParentID"; column.ReadOnly = false; column.Unique = false; table.Columns.Add(column); dataSet.Tables.Add(table); // Create three sets of DataRow objects, // five rows each, and add to DataTable. for(int i = 0; i <= 4; i ++) { row = table.NewRow(); row["childID"] = i; row["ChildItem"] = "Item " + i; row["ParentID"] = 0 ; table.Rows.Add(row); } for(int i = 0; i <= 4; i ++) { row = table.NewRow(); row["childID"] = i + 5; row["ChildItem"] = "Item " + i; row["ParentID"] = 1 ; table.Rows.Add(row); } for(int i = 0; i <= 4; i ++) { row = table.NewRow(); row["childID"] = i + 10; row["ChildItem"] = "Item " + i; row["ParentID"] = 2 ; table.Rows.Add(row); } } private void MakeDataRelation() { // DataRelation requires two DataColumn // (parent and child) and a name. DataColumn parentColumn = dataSet.Tables["ParentTable"].Columns["id"]; DataColumn childColumn = dataSet.Tables["ChildTable"].Columns["ParentID"]; DataRelation relation = new DataRelation("parent2Child", parentColumn, childColumn); dataSet.Tables["ChildTable"].ParentRelations.Add(relation); } private void BindToDataGrid() { // Instruct the DataGrid to bind to the DataSet, with the // ParentTable as the topmost DataTable. dataGrid1.SetDataBinding(dataSet,"ParentTable"); } |