C# 从弹出窗体更新绑定到DataGridView的对象列表

C# 从弹出窗体更新绑定到DataGridView的对象列表,c#,winforms,datagridview,C#,Winforms,Datagridview,在将弹出窗体上的编辑按钮上的更新信息返回到原始窗体上的DataGridView(绑定到对象列表)时,我似乎有点问题 前几天我似乎让它工作了,但是,今天我又回来工作了,它似乎不起作用,我不知道这是因为我的逻辑有缺陷,还是有些东西被意外删除了 我有两张表格Shopping Form.cs和Popup.cs Shopping Form.cs在名为dataGridBasket的DataGridView中显示购物篮,该购物篮绑定到一个单独的ListOrderItems,它来自myOrderItem类。这可

在将弹出窗体上的编辑按钮上的更新信息返回到原始窗体上的
DataGridView
(绑定到对象列表)时,我似乎有点问题

前几天我似乎让它工作了,但是,今天我又回来工作了,它似乎不起作用,我不知道这是因为我的逻辑有缺陷,还是有些东西被意外删除了

我有两张表格
Shopping Form.cs
Popup.cs

Shopping Form.cs
在名为
dataGridBasket
DataGridView
中显示购物篮,该购物篮绑定到一个单独的
ListOrderItems
,它来自my
OrderItem
类。这可以通过填写
ProductName
数量和
最新价格
页面上提供的文本框/数字下拉列表,然后单击添加按钮
btnAdd
添加到中。它还可以通过单击“删除”按钮来删除选定行中的数据

以下是
购物表单.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();
            }
        }
{
    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); } }
    }

}
这是
弹出窗口.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();
            }
        }
{
    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时,原始表单上的数据不会更改

有什么建议吗


提前感谢。

如果数据绑定项不包含notify property changed事件,则用户界面(datagridview)不会知道任何更改。您必须手动触发刷新。如果数据绑定项不包含notify属性更改事件,则用户界面(datagridview)将不知道任何更改。您必须手动触发刷新。要么是整个网格,要么是源代码,要么是类似于
dataGridBasket.InvalidateRow(SelectedRow.Index)
@Me.Name啊,是的!我真傻!我必须删除了重新绑定,我刚刚添加了
dataGridBasket.DataSource=null
然后
dataGridBasket.DataSource=myBasket.OrderItems,它又起作用了。感谢您的评论,请将其添加为答案,以便我可以接受它!:)Okidoki,复制粘贴评论;)很高兴它有用。