ADO.NET中DataTable的應用(讀書筆記4)
一.思維導圖
二.知識點描述
DataTable是一個臨時保存數據的網格虛擬表(表示內存中數據的一個表。)
1.用法介紹:
(1)可以使用相應的 DataTable 構造函數創建 DataTable 對象。 可以通過使用 Add 方法將其添加到 DataTable 對象的 Tables集合中,將其添加到 DataSet 中。
(2)使用 DataAdapter 對象的 Fill 方法或 FillSchema 方法在 DataSet 中創建,或者使用 DataSet 的 ReadXml、ReadXmlSchema 或InferXmlSchema 方法從預定義的或推斷的 XML 架構中創建。 請註意,將一個 DataTable 作為成員添加到一個 DataSet 的 Tables 集合中後,不能再將其添加到任何其他 DataSet 的表集合中。
(3)在為 DataTable 定義了架構之後,可通過將 DataRow 對象添加到表的 Rows 集合中來將數據行添加到表中。
2.在DataTable中處理數據
(1)向數據表中添加數據
(2)說明如何創建新行並將它們添加到表中。
(3)查看數據表中的數據
(4)說明如何訪問行中的數據,包括數據的原始版本和當前版本。
(5)Load 方法
(6)說明如何通過 Load 方法使用行填充 DataTable。
(7)DataTable 編輯
(8)說明如何修改行中的數據,包括掛起對行的更改,直至驗證並接受了建議的更改。
(9)行狀態與行版本
(10)提供有關行的不同狀態的信息。
(11)DataRow 刪除
(12)說明如何從表中移除行。
(13)行錯誤信息
(14)說明如何插入每行的錯誤信息,幫助解決應用程序中的數據問題。
(15)AcceptChanges 和 RejectChanges
(16)說明如何接受或拒絕對行的更改。
3.屬性和方法
(1)屬性:
名稱 | 說明 |
CaseSensitive | 指示表中的字符串比較是否區分大小寫 |
Columns | 獲取屬於該表的列的集合。 |
DataSet | 獲取此表所屬的 DataSet。 |
HasErrors | 獲取一個值,該值指示該表所屬的 DataSet 的任何表的任何行中是否有錯誤。 |
Rows | 獲取屬於該表的行的集合。 |
TableName | 獲取或設置 DataTable 的名稱 |
(2)方法:
名稱 | 方法 |
Clear | 清除所有數據的 DataTable。 |
Clone | 克隆 DataTable 的結構,包括所有 DataTable 架構和約束。 |
Compute | 計算用來傳遞篩選條件的當前行上的給定表達式 |
Copy | 復制該 DataTable 的結構和數據。 |
GetErrors | 獲取包含錯誤的 DataRow 對象的數組。 |
GetType | 獲取當前實例的 Type。 (繼承自 Object。) |
ImportRow | 將 DataRow 復制到 DataTable 中,保留任何屬性設置以及初始值和當前值 |
三.示例代碼和效果截圖
對DataTable執行初始化、數據填充、克隆等操作。
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.Data.SqlClient; 10 using System.Configuration; 11 12 namespace LOGIN 13 { 14 public partial class OrdersTable : Form 15 { 16 private DataTable ordersTable; 17 private DataView OrdersViewByName; 18 private DataView OrdersViewBysupplyer; 19 public OrdersTable() 20 { 21 InitializeComponent(); 22 23 //this.StartPosition = FormStartPosition.CenterScreen; 24 this.dgv_orders.AllowUserToAddRows = false; 25 //this.dgv_orders.RowHeadersVisible = false; 26 this.dgv_orders.BackgroundColor = Color.White; 27 this.dgv_orders.AutoSizeColumnsMode = 28 DataGridViewAutoSizeColumnsMode.AllCells; 29 } 30 31 private void OrdersTable_Load(object sender, EventArgs e) 32 { 33 SqlConnection sqlConnection = new SqlConnection(); 34 sqlConnection.ConnectionString = 35 "Server=(local);Database=MyHospital;Integrated Security=sspi"; 36 SqlCommand sqlCommand = new SqlCommand(); 37 SqlCommand sqlCommand1 = new SqlCommand(); 38 39 sqlCommand.Connection = sqlConnection; 40 sqlCommand1.Connection = sqlConnection; 41 42 sqlCommand.CommandText = "select OrderID,SupplyID,OrderKinds,OrderDate,GetDate,ProducePla,State,c.DrugName,cs.IndPrice,Num,TolPrice,cs.Guige FROM orders cs JOIN dbo.medicineData c ON cs.MedicineID=c.MedicineID;"; 43 sqlCommand1.CommandText = "select SupplyID,Supplyname from supplyer;"; 44 45 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); 46 sqlDataAdapter.SelectCommand = sqlCommand; 47 //DataTable ordersTable = new DataTable(); 48 SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter(); 49 sqlDataAdapter1.SelectCommand = sqlCommand1; 50 DataTable supplyerTable = new DataTable(); 51 sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; 52 this.ordersTable = new DataTable(); 53 54 sqlConnection.Open(); 55 sqlDataAdapter.Fill(this.ordersTable); 56 sqlDataAdapter1.Fill(supplyerTable); 57 58 sqlConnection.Close(); 59 this.ordersTable.TableName = "tablename"; 60 this.OrdersViewByName = new DataView(); 61 this.OrdersViewByName.Table = this.ordersTable; 62 this.OrdersViewByName.Sort = "DrugName ASC"; 63 64 this.OrdersViewBysupplyer = new DataView(); 65 this.OrdersViewBysupplyer.Table = this.ordersTable; 66 this.OrdersViewBysupplyer.Sort = "ProducePla ASC"; 67 68 this.dgv_orders.DataSource = ordersTable; 69 dgv_orders.Columns["OrderID"].ReadOnly = true; 70 dgv_orders.Columns["OrderKinds"].ReadOnly = true; 71 dgv_orders.Columns["State"].ReadOnly = true; 72 dgv_orders.Columns["DrugName"].ReadOnly = true; 73 dgv_orders.Columns["OrderID"].HeaderText = "訂單號"; 74 dgv_orders.Columns["SupplyID"].Visible=false; 75 dgv_orders.Columns["OrderKinds"].HeaderText = "訂單"; 76 dgv_orders.Columns["OrderDate"].HeaderText = "訂單日期"; 77 dgv_orders.Columns["GetDate"].HeaderText = "到貨日期"; 78 dgv_orders.Columns["ProducePla"].HeaderText = "生產地"; 79 dgv_orders.Columns["State"].HeaderText = "是否入庫"; 80 dgv_orders.Columns["DrugName"].HeaderText = "藥品"; 81 dgv_orders.Columns["DrugName"].DisplayIndex=3; 82 dgv_orders.Columns["IndPrice"].HeaderText = "單價"; 83 dgv_orders.Columns["Num"].HeaderText = "數量"; 84 dgv_orders.Columns["TolPrice"].HeaderText = "總價"; 85 dgv_orders.Columns["Guige"].HeaderText = "規格"; 86 this.dgv_orders.Columns[this.dgv_orders.Columns.Count - 1].AutoSizeMode = 87 DataGridViewAutoSizeColumnMode.Fill; 88 89 DataGridViewComboBoxColumn supplyerColumn = new DataGridViewComboBoxColumn(); 90 supplyerColumn.Name = "Supplyname"; 91 supplyerColumn.HeaderText = "供應商"; 92 supplyerColumn.DataSource = supplyerTable; 93 supplyerColumn.DisplayMember = "Supplyname"; 94 supplyerColumn.ValueMember = "SupplyID"; 95 supplyerColumn.DataPropertyName = "SupplyID"; 96 supplyerColumn.DisplayIndex = 1; 97 //supplyerColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 98 this.dgv_orders.Columns.Add(supplyerColumn); 99 100 DataGridViewColumn medicineColumn = new DataGridViewColumn(); 101 medicineColumn.Name = "medicine"; 102 medicineColumn.HeaderText = "藥品名"; 103 104 105 106 107 } 108 109 private void update_Click(object sender, EventArgs e) 110 { 111 SqlConnection sqlConnection = new SqlConnection(); 112 sqlConnection.ConnectionString = 113 ConfigurationManager.ConnectionStrings["Sql"].ConnectionString; 114 SqlCommand updateCommand = new SqlCommand(); 115 updateCommand.Connection = sqlConnection; 116 updateCommand.CommandText = 117 "UPDATE orders" 118 + " SET SupplyID=@SupplyID,OrderDate=@OrderDate,GetDate=@GetDate,ProducePla=@ProducePla,IndPrice=@IndPrice,Num=@Num,TolPrice=@TolPrice,Guige=@Guige,state=@state" 119 + " WHERE OrderID=@OrderID;"; 120 updateCommand.Parameters.Add("@OrderID", SqlDbType.Char, 10, "OrderID"); 121 updateCommand.Parameters.Add("@SupplyID", SqlDbType.Char, 10, "SupplyID"); 122 updateCommand.Parameters.Add("@OrderDate", SqlDbType.DateTime, 0, "OrderDate"); 123 updateCommand.Parameters.Add("@GetDate", SqlDbType.DateTime, 0, "GetDate"); 124 updateCommand.Parameters.Add("@ProducePla", SqlDbType.VarChar, 0, "ProducePla"); 125 updateCommand.Parameters.Add("@IndPrice", SqlDbType.Char, 0, "IndPrice"); 126 updateCommand.Parameters.Add("@Num", SqlDbType.Int, 0, "Num"); 127 updateCommand.Parameters.Add("@TolPrice", SqlDbType.Int, 10, "TolPrice"); 128 updateCommand.Parameters.Add("@Guige", SqlDbType.VarChar, 10, "Guige"); 129 updateCommand.Parameters.Add("@state", SqlDbType.Int, 0, "state"); 130 131 132 SqlCommand deleteCommand = new SqlCommand(); 133 deleteCommand.Connection = sqlConnection; 134 deleteCommand.CommandText = 135 "DELETE orders" 136 + " WHERE OrderID=@OrderID;"; 137 deleteCommand.Parameters.Add("@OrderID", SqlDbType.Char, 10, "OrderID"); 138 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); 139 //sqlDataAdapter.InsertCommand = insertCommand; 140 sqlDataAdapter.UpdateCommand = updateCommand; 141 sqlDataAdapter.DeleteCommand = deleteCommand; 142 DataTable studentTable1 = (DataTable)this.dgv_orders.DataSource; 143 sqlConnection.Open(); 144 int rowAffected = sqlDataAdapter.Update(studentTable1); 145 sqlConnection.Close(); 146 MessageBox.Show("更新" + rowAffected.ToString() + "行。"); 147 } 148 149 private void input_Click(object sender, EventArgs e) 150 { 151 Orders f = new Orders(); 152 f.Show(); 153 } 154 155 private void search_Click(object sender, EventArgs e) 156 { 157 158 if (this.comboBox1.SelectedIndex == 0 && this.search.Text != "") 159 { 160 DataRow searchResultRow = this.ordersTable.Rows.Find(this.textBox1.Text.Trim()); 161 DataTable searchResultTable = this.ordersTable.Clone(); 162 searchResultTable.ImportRow(searchResultRow); 163 this.dgv_orders.DataSource = searchResultTable; 164 } 165 else if (this.comboBox1.SelectedIndex == 1 && this.search.Text != "") 166 { 167 DataRowView[] searchResultRowViews = 168 this.OrdersViewByName.FindRows(this.textBox1.Text.Trim()); 169 DataTable searchResultTable = this.ordersTable.Clone(); 170 foreach (DataRowView dataRowView1 in searchResultRowViews) 171 { 172 searchResultTable.ImportRow(dataRowView1.Row); 173 } 174 this.dgv_orders.DataSource = searchResultTable; 175 } 176 else if (this.comboBox1.SelectedIndex == 2 && this.search.Text != "") 177 { 178 DataRowView[] searchResultRowViews = 179 this.OrdersViewBysupplyer.FindRows(this.textBox1.Text.Trim()); 180 DataTable searchResultTable = this.ordersTable.Clone(); 181 foreach (DataRowView dataRowView1 in searchResultRowViews) 182 { 183 searchResultTable.ImportRow(dataRowView1.Row); 184 } 185 this.dgv_orders.DataSource = searchResultTable; 186 } 187 188 189 } 190 } 191 }
ADO.NET中DataTable的應用(讀書筆記4)