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
,它来自myOrderItem
类。这可以通过填写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,复制粘贴评论;)很高兴它有用。