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

本文关键字:DataGridView 对象 列表 绑定 窗体 更新 | 更新日期: 2023-09-27 17:59:02

我似乎在将弹出表单上的编辑按钮上的更新信息返回到原始表单上的DataGridView(绑定到对象列表(时遇到了一些问题。

前几天我似乎让它工作了,但是,我今天回来工作,它似乎不起作用,我不知道这是因为我的逻辑有缺陷,还是不小心删除了什么。

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

Shopping Form.cs在一个名为dataGridBasketDataGridView中显示了一个购物篮,该购物篮绑定到来自我OrderItem班的单独List<OrderItem>OrderItems。这可以通过在页面上填写提供的文本框/数字上下ProductName QuantityLatestPrice然后单击添加按钮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); } }
    }
}

弹出窗口工作正常,字段填充了所选行中的信息,但是,当用户更新信息并按"确定"时,原始表单上的数据不会更改。

有什么指示吗?

提前谢谢。

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

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