2013-04-30 3 views
2

Как отредактировать datagridview в C#, который будет обновлять базу данных с использованием трехуровневой архитектуры. Может ли кто-нибудь поделиться образцом кода, так как я новичок в этой концепции из 3 уровней.Обновление записей в datagridview с использованием архитектуры 3 уровня в C#

ответ

0

Это немного долго, но я буду стараться =)

Предположим, у вас нет дополнительной логики, кроме приведения данных к DataGridView, поэтому функции логических слоев просто вызывать функции уровня данных.
Теперь в этом примере у нас есть форма с 2 dgv, одна для деталей заказа (readOnly) и seccond для строк определенного порядка - в этом 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().

Заявить код 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; } 
    } 
} 

Надежда я помог и простите за мой английский =)

Примечание Есть те, кто не хотел бы видеть любое имя таблицы, ячейки или отношений в представительский уровень, так что они будут добавлять дополнительные функционирует по мере необходимости.