Data set
- 1. DataTable ба DataSet
DataSet объект нь санах ой дах єгєгдлийн бааз билээ. Энэ объект нь SQL мэдэгдлээр дамжин
єгєгдєлтэй харьцаж байдаг DataTable объектуудыг агуулдаг.
DataSet нь єгєгдлийг XML-ээр хадгалдаг. Мєн бvдvvвч мэдээллийг агуулж, DataTable-vvдийн
хоорондох relationship-ийг хадгалж байдаг. Та єгєгдлийг нэмэх, засварлах, устгах vйлдлvvдийг
DataSet-ээр хялбархан гvйцэтгэж чадна.
Энэ хичээлээр DataTable. DataSet объектуудыг ашиглан єгєгдєл оруулах форм хийхийг vзье.
Зураг 1.
Бидний жишээнд vзэх формын Load vзэгдлийн процедурт дараах кодыг бичиж єгнє.
private void frmProduct_Load(object sender, System.EventArgs e)
{
// Suppliers (Нєєц) combo box-ийг дvvргэх
SupplierLoad();
// Categories (Категори) combo box-ийг дvvргэх
CategoryLoad();
// DataSet-ийг vvсгэх
DataSetCreate();
// Products (бvтээгдэхvvн)–ийн List Box-ийг дvvргэх
ListLoad();
}
DataTable объектыг хэрэглэх
Зураг1 дээрх Suppliers, Categories combo box-уудыг DataTable объект ашиглан дvvргэе.
private void SupplierLoad()
{
OleDbDataAdapter oAdapter;
DataTable oTable = new DataTable();
PDSAListItemNumeric oItem;
string strSQL;
string strConn;
int intLoop;
strConn = ConnectStringBuild();
strSQL = "SELECT SupplierID, CompanyName ";
strSQL += "FROM Suppliers";
- 2. try
{
oAdapter = new OleDbDataAdapter(strSQL, strConn);
oAdapter.Fill(oTable);
for(intLoop = 0;intLoop < oTable.Rows.Count ;intLoop++) { oItem = new
PDSAListItemNumeric(); oItem.Value =
oTable.Rows[intLoop]["CompanyName"].ToString(); oItem.ID =
(int)oTable.Rows[intLoop]["SupplierID"]; cboSupplier.Items.Add(oItem); }
}
catch (InvalidCastException e1)
{
MessageBox.Show(e1.Message.ToString());
}
}
Та combo box-ийг дvvргэхийн тулд OleDbDataAdapter-ийг ашиглан DataTable объектыг югюгдлююр дvvргэнэ.
Бидний мэдэх PDSAListItemNumeric классыг ашиглан Suppliers хvснэгтээс Combo box контролыг primare key,
дэлгэцэнд харагдах утгаар дvvргэнэ.
Дараах функц нь єгєгдлєєр хангагчтай холбогдох тэмдэгт мєр буцаана. Та сvлжээ ашиглан SQL
Server-тэй холбогдох бол дараах функцыг єєрчлєн бичээрэй.
private string ConnectStringBuild()
{
string strConn ;
strConn = "Provider=sqloledb;";
strConn += "Data Source=(local);";
strConn += "Initial Catalog=Northwind;";
strConn += "User ID=sa";
return strConn;
}
Хэрэв танд SQL Server байхгvй бол Microsoft Access-ийн NorthWind жишээ югюгдлийн баазыг ашиглаж болно.
Дараах байдлаар тодорхойлох ба та файлынхаа замыг засаж бичээрэй.
Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:AccessNorthwind.mdb
Categories combo box-ыг дээрхтэй тєстэй байдлаар дvvргэнэ.
1. SupplierLoad процедурын хуулбарыг vvсгэн, нэрийг нь CategoryLoad гэж ююрчилню.
2. SELECT мэдэгдэлд байгаа хvснэгт болон багануудын нэрийг солино. Хvснэгтийн нэрийг Categories,
багануудын нэрийг
3. CategoryID, CategoryName гэж ююрчилню.
4. PDSAListItemNumeric классаас авч буй багануудын нэрийг ююрчилню
5. cboSupplier combo box–ыг cboCategory combo box болгон ююрчилню.
DataSet объектыг хэрэглэх
DataTable объект нь дан хvснэгтийн єгєгдєл байдаг ба combo box болон list box-уудыг ачаалахад
голчлон хэрэглэгддэг. DataSet нэг болон тvvнээс их DataTable-ийг багтаадаг ба єгєгдєл оруулах
формд DataSet vvсгэснээр List box-ыг єгєгдлєєр дvvргэх, нэмэх, засах, устгах vйлдлvvдийг
гvйцэтгэхэд туслана.
- 3. Юуны ємнє формд хэрэглэгдэх глобал хувьсагч зарлая. Private хувьсагч нь зєвхєн формд
хэрэглэгдэнэ гэдгийг тодорхойлдог.
///
/// Summary description for Products.
///
public class frmProduct : System.Windows.Forms.Form
{
private DataSet moDS;
Дараах DataSet vvсгэх процедурыг бичье.
private void DataSetCreate()
{
OleDbDataAdapter oAdapter;
string strSQL;
string strConn;
// Холболтын тэмдэгт мєрийг авах
strConn = ConnectStringBuild();
// SQL тэмдэгт мєр
strSQL = "SELECT * ";
strSQL += "FROM Products";
moDS = new DataSet();
try
{
// DataAdapter-ийг шинээр vvсгэх
oAdapter = new OleDbDataAdapter(strSQL, strConn);
// Data Set-ийг Adapter-аас дvvргэх
oAdapter.Fill(moDS, "Products");
// Тvлхvvр талбар
moDS.Tables["Products"].PrimaryKey =
new DataColumn[]{moDS.Tables["Products"].Columns["ProductID"]};
moDS.Tables["Products"].Columns["ProductID"].AutoIncrement=true;
}
catch (InvalidCastException e1)
{
MessageBox.Show(e1.Message);
}
}
Дээрх код бидний юмню vvсгэсэн DataTable-ийг vvсгэхтэй тюстэй. Энд шинэ “Products” DataTable-ийг DataSet-д
vvсгэж байна. Та энэ нэрийг ашиглан DataSet-ийн Tables collection дах хvснэгттэй холбогдоно. Жишээ нь:
oDS.Tables(“Products”) нь DataAdapter-аар дvvргэгдсэн DataTable объект буцаадаг.
Хэрэв та DataSet-ийн DataTable-ээс хайлт хийх бол DataTable-д PrimaryKey (тvлхvvр талбар) баганыг
тодорхойлож єгєх хэрэгтэй. PrimaryKey–д нэг болон хэд хэдэн багана тодорхойлж єгч болно. Иймд
PrimaryKey нь DataColumn-ын массив тєрєлтэй. Бидний жишээнд нэг л багана тодорхойлох учир нэг
урттай DataColumn массивыг PrimaryKey-д оноож єгнє.
ListBox-ыг DataSet-ээс дvvргэх нь
private void ListLoad()
{
PDSAListItemNumeric oItem ;
lstProducts.Items.Clear();
// Мөр болгоноор давталт хийж DataRow-д авна
foreach( DataRow oRow in moDS.Tables["Products"].Rows)
{
// Шинэ тvлхvvр ба тайлбар бvхий Item vvсгэх
- 4. oItem = new PDSAListItemNumeric();
oItem.ID = (int) oRow["ProductID"];
oItem.Value = oRow["ProductName"].ToString();
// list box-руу нэмэх
lstProducts.Items.Add(oItem);
}
lstProducts.SetSelected(0, true);
}
DataSet-ээс тодорхой мєрийг хайх
Бvтээгдэхvvний жагсаалт дээр товшилт хийхэд тухайн бvтээгдэхvvний талаар дэлгэрэнгvй мэдээллийг форм
дээрх контролуудад гаргаж суръя. Эхлээд та List box дээр товшилт хийхэд биелэх кодыг бичье.
Формын дизайн горим vед давхар товшилт хийн SelectedIndexChanged vзэгдлийн процедурыг
vvсгэнэ. Тэгээд дараах кодыг бичнэ.
private void lstProducts_SelectedIndexChanged(object sender, System.EventArgs e)
{
FormShow();
}
Дараах FormShow процедур нь DataSet-ээс тодорхой мюрийг хайн, тэр мюрююс форм дээрх контролуудыг
мэдээллээр дvvргэнэ.
private void FormShow()
{
DataRow oDR;
PDSAListItemNumeric oItem;
string strID;
// List Box-оос Primary Key-г авах
oItem =(PDSAListItemNumeric)lstProducts.SelectedItem;
// DataSet-ээс мєр хайх
oDR=moDS.Tables["Products"].Rows.Find(oItem.ID);
// Өгєгдлийг дэлгэцэнд гаргах
txtID.Text = oDR["ProductID"].ToString();
txtName.Text = oDR["ProductName"].ToString();
strID = oDR["SupplierID"].ToString();
FindItem(cboSupplier, strID);
strID = oDR["CategoryID"].ToString();
FindItem(cboCategory, strID);
txtQty.Text = oDR["QuantityPerUnit"].ToString();
txtPrice.Text = oDR["UnitPrice"].ToString();
txtInStock.Text = oDR["UnitsInStock"].ToString();
txtOnOrder.Text = oDR["UnitsOnOrder"].ToString();
txtReorder.Text = oDR["ReorderLevel"].ToString();
chkDisc.Checked = System.Convert.ToBoolean (oDR["Discontinued"]);
}
List box нь зювхюн Object югюгдлийн тюрюлтэй байдаг учир Ctype функцыг хэрэглэн PDSAListItemNumeric тюрюл рvv
хюрвvvлнэ. Та энэ хюрвvvлэгдсэн тюрлийн ID property-гоос primary key-г авна. Find method нь ID-д харгалзах дан
DataRow объектыг буцаадаг. DataRow объектоос багана болгоны утгыг авч контролыг югюгдлююр дvvргэж байна.
`