2
如何編輯c#中的datagridview,它將使用3層體系結構更新數據庫。有人可以分享代碼示例,因爲我是這個3層概念的新手。在c#中使用3層體系結構更新datagridview中的記錄#
如何編輯c#中的datagridview,它將使用3層體系結構更新數據庫。有人可以分享代碼示例,因爲我是這個3層概念的新手。在c#中使用3層體系結構更新datagridview中的記錄#
這是一個有點長,但我會盡量=)
假設你沒有額外的邏輯,除了把數據到DataGridView,因此邏輯層功能簡單地調用數據層功能。
現在在這個示例中,我們有一個2 dgv,一個用於訂單詳細信息(只讀)和一個特定訂單行的第二個表單 - 在此dgv中,我們爲產品添加一個ComboBox,另一個用於保存按鈕。
在窗體加載我把這個簡單的FUNC,
private void setOrderGridView()
{
BindingSource orderSrc = new BindingSource(logic.GetOrderDetailsDS(FrmOrder.currentOrderID), "tblOrders");
dgvOrdrdtls.DataSource = orderSrc;
var src = logic.GetProductTable();
BindingSource detailSrc = new BindingSource(orderSrc, "orderdetails");
dgvLines.DataSource = detailSrc;
DataGridViewComboBoxColumn pr = new DataGridViewComboBoxColumn();
pr.HeaderText = "Product";
pr.Name = "product";
pr.DataSource = src;
pr.ValueMember = "pdctId";
pr.DisplayMember = "prdctDsc";
pr.DataPropertyName = "ordrPrdctid";
dgvLines.Columns.Add(pr);
}
下面你將看到的功能GetOrderDetailsDS(..)
和GetProductTable()
這一切是負載DGV的,你完成輸入或編輯DGV後,btnSave_Click(..)
請致電SaveChanges()
函數。
Hare DAL代碼。
public class DALimp : iDAL
{
string connStr;
SqlConnection conn;
SqlCommand cmd;
DataSet ds;
SqlDataAdapter da;
public DALimp()
{
connStr = ConfigurationManager.ConnectionStrings["StoreDBConnectionString"].ConnectionString;
conn = new SqlConnection(connStr);
}
public DataSet GetOrderDetailsDS(int oId)
{
var select = "SELECT * FROM tblOrders WHERE orderId='"+oId+"'";
ds = new DataSet();
cmd = new SqlCommand(select, conn);
try
{
conn.Open();
ds.Load(cmd.ExecuteReader(), LoadOption.OverwriteChanges, "tblOrders");
}
catch (Exception ex)
{ throw ex; }
finally
{ conn.Close(); }
return ds;
}
public DataTable GetProductTable()
{
cmd = new SqlCommand("SELECT * FROM tblProducts", conn);
da = new SqlDataAdapter("SELECT * FROM tblorderLines", conn);
da.InsertCommand = new SqlCommand("INSERT INTO tblorderLines (ordrNumid,ordrPrdctid,ordrQuantity) Values(@oid,@pid,@qnt)", conn);
da.InsertCommand.Parameters.Add("@oid", SqlDbType.Int, 0, "ordrNumid");
da.InsertCommand.Parameters.Add("@pid", SqlDbType.Int, 0, "ordrPrdctid");
da.InsertCommand.Parameters.Add("@qnt", SqlDbType.SmallInt, 0, "ordrQuantity");
try
{
conn.Open();
ds.Load(cmd.ExecuteReader(), LoadOption.OverwriteChanges, "tblProducts");
da.Fill(ds, "tblorderLines");
ds.Relations.Add("orderdetails", ds.Tables["tblOrders"].Columns["orderId"], ds.Tables["tblorderLines"].Columns["ordrNumid"], false);
}
catch (Exception ex)
{ throw ex; }
finally
{ conn.Close(); }
return ds.Tables["tblProducts"];
}
public bool SaveChanges()
{
try
{
if (ds.Tables["tblorderLines"].GetChanges() == null)
return false;
var update = "UPDATE tblorderLines SET ordrNumid= @oni, ordrPrdctid= @opi, ordrQuantity= @oq WHERE ordritmId= @oii";
var cmd = new SqlCommand(update, conn);
cmd.Parameters.Add("@oni", SqlDbType.Int, 4, "ordrNumid");
cmd.Parameters.Add("@opi", SqlDbType.Int, 4, "ordrPrdctid");
cmd.Parameters.Add("@oq", SqlDbType.SmallInt, 2, "ordrQuantity");
cmd.Parameters.Add("@oii", SqlDbType.BigInt, 8, "ordritmId").SourceVersion = DataRowVersion.Original;
da.UpdateCommand = cmd;
da.Update(ds, "tblorderLines");
return true;
}
catch (Exception ex)
{ throw ex; }
}
}
希望我幫助和抱歉,我的英語水平=)
注意還有那些誰不願意看到的表示層中的表,單元或關係的任何名字,所以他們會增加額外的根據需要運行。