2015-06-22 59 views
1

我似乎在将弹出窗体上放置的编辑按钮上的更新信息返回给我的DataGridView(这是绑定到原始表单上的对象列表)。从弹出窗体更新绑定到DataGridView的对象列表

但是,我似乎有一天在工作,但是,我今天又回来工作,它似乎没有功能,我不知道这是否是因为有缺陷我的逻辑,或者意外被删除了。

我有两种形式。 Shopping Form.csPopup.cs

Shopping Form.cs显示在DataGridView一个购物篮叫dataGridBasket这势必它来自我的OrderItem类单独List<OrderItem>OrderItems。可以通过在页面ProductNameQuantityLatestPrice中填写提供的文本框/ numericUpDowns,然后单击添加按钮btnAdd来添加此项。它还能够通过单击删除按钮btnRemove从选定行中删除数据。

下面是从Shopping Form.cs

#region Edit button 
     private void btnEdit_Click(object sender, EventArgs e) 
     { 
      DataGridViewRow row = dataGridBasket.CurrentRow; 
      OrderItem oi = myBasket.OrderItems[dataGridBasket.SelectedRows[0].Index]; 
      if (!row.IsNewRow) 
      { 
       DialogResult dialogresult; 
       Popup form = new Popup(row); 
       dialogresult = form.ShowDialog(); 
       if (dialogresult == System.Windows.Forms.DialogResult.OK) 
       { 
        oi.ProductName = form.ProdName; 
        oi.Quantity = Convert.ToInt32(form.QuantityE); 
        oi.LatestPrice = form.LatPrice; 
       } 
       else if (dialogresult == System.Windows.Forms.DialogResult.Cancel) 
       { 
        form.Close(); 
       } 
       form.Dispose(); 
      } 
     } 

代码这里是Popup.cs

{ 
    public partial class Popup : Form 
    { 
     public Popup(DataGridViewRow rowToEdit) 
     { 
      InitializeComponent(); 

      txtEditProdName.Text = rowToEdit.Cells[0].Value.ToString(); 

      string quantityToEdit = rowToEdit.Cells[1].Value.ToString(); 
      decimal iQuantityToEdit = Convert.ToDecimal(quantityToEdit); 
      upDownEditQuantity.Value = iQuantityToEdit;    

      string latestPriceToEdit = rowToEdit.Cells[2].Value.ToString(); 
      txtEditLatPrice.Text = latestPriceToEdit;    
     } 

     public string ProdName { get { return txtEditProdName.Text; } } 

     public decimal QuantityE { get { return upDownEditQuantity.Value; } } 

     public decimal LatPrice { get { return Convert.ToDecimal(txtEditLatPrice.Text); } } 
    } 

} 

弹出的作品就好了和字段填入从选定行的信息,但是,当用户更新信息并按OK时,原始表格上的数据不会改变。

任何指针?

在此先感谢。

+1

如果数据绑定项目不包含通知属性更改事件,用户界面(datagridview)将不知道任何已更改。您必须手动触发刷新。无论是整个网格或源或类似'dataGridBasket.InvalidateRow(SelectedRow.Index)' –

+0

@ Me.Name啊是的!傻我!我必须删除重新绑定,我刚刚添加在'dataGridBasket.DataSource = null;'然后'dataGridBasket.DataSource = myBasket.OrderItems;'并且它再次工作。感谢您的评论,将其添加为答案,以便我可以接受它! :) –

+0

Okidoki,复制粘贴评论;)很高兴它是有用的。 –

回答

1

如果数据绑定项目不包含通知属性更改的事件,则用户界面(datagridview)将不知道任何更改。您必须手动触发刷新。无论是整个网格或来源或类似dataGridBasket.InvalidateRow(row.Index)

相关问题