2013-12-19 2 views
0

Как внести изменения, внесенные в DataGridView с помощью PetaPoco? Что-то вроде:PetaPoco in WinForms

namespace PetaPocoTest 
{ 
    public partial class Form1 : Form 
    { 
     PetaPoco.Database db = new PetaPoco.Database("PgConnection"); 

     IEnumerable<customers> allCustomers; 


     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      allCustomers = db.Query<customers>("SELECT * FROM customers"); 
      mGrid.DataSource = allCustomers .ToList();    
     } 

     private void simpleButton1_Click(object sender, EventArgs e) 
     { 
      db.Save("customers", "custumer_id", allCustomers); 
     } 
    } 
} 
+0

Что ваша команда 'db.Save' Делай сейчас? Сохраняет ли оно какие-либо изменения? Сохраняет ли он все, кроме последней ячейки, которую вы редактировали? –

+0

Вы устанавливаете 'DataSource' в' allCustomers.ToList() ', который (я считаю) фактически создает новый список. Поэтому, когда вы делаете 'db.Save (... allCustomers)', я не думаю, что вы обращаетесь к списку, который связан с сеткой, поэтому вы, вероятно, не получите никаких изменений. Попробуйте переместить '.ToList()' в строку над ним: 'allCustomers = db.Query (« SELECT * FROM customers »). ToList();' –

+0

db.Save не работает. Я получаю «Объект не имеет свойства, соответствующего имени столбца первичного ключа« customer_id »« – EmirZ

ответ

0

Я, наконец, получил его. Я просто впустую часы на что-то настолько очевидное: \

namespace PetaPocoTest 
{ 
    public partial class Form1 : Form 
    { 
     PetaPoco.Database db = new PetaPoco.Database("PgConnection"); 

     IEnumerable<customers> allCustomers; 


     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      allCustomers = db.Query<customers>("SELECT * FROM customers"); 
      mGrid.DataSource = allCustomers .ToList();    
     } 

     private void simpleButton1_Click(object sender, EventArgs e) 
     { 
      foreach (var a in allCustomers) 
      { 
       db.Save("customers", "custumer_id", a); 
      } 
     } 
    } 
} 
+0

Nop ... это нехорошо! Он работает, но он генерирует и выполняет UPDATE-s для всех строк независимо от их модификации или нет! – EmirZ

+0

Micro ORM обычно не отслеживают изменения. Вам нужно будет реализовать это самостоятельно. Я предлагаю вам посмотреть событие модификации и отметить каждого клиента, который будет изменен как обновленный. Затем при сохранении сохраняются только те клиенты, которые изменились – Plebsori

1

Попробуйте мой ответ Here

Это самый простой и самый простой и может делать то, что вы хотите до сих пор