我正在使用datagridview,bindingnavigator和挂钩到bindingsource的文本框(在代码中设置)。当我在网格中选择行内容显示在文本框中时,一切都很好。
txtQty.DataBindings.Add("Text", bsInvoiceDetails, "Detail_Quantity");
接下来,我单击绑定导航器上的添加。它向数据网格添加一个空行,这很好,但它不会清除文本框。网格中突出显示的行是不同的行。当我手动选择新行时,文本框仍然不会更改。
如果我输入在网格中选择新行的texbox,它实际上会更改不同的行值。
我无法弄清楚为什么这是我们如何解决它。
更新:
执行查询,返回数据表...将其附加到数据集...数据集是绑定源的数据源...
dsInvoiceDetails = new
dsInvoiceDetails.Tables.Add(dtInvoiceDetails);
bsInvoiceDetails.DataSource = dsInvoiceDetails;
bsInvoiceDetails.DataMember = "Invoice_Detail";
将网格和绑定导航器挂钩到绑定源的代码...
gridInvoiceDetails.DataSource = bsInvoiceDetails;
bnInvoiceDetails.BindingSource = bsInvoiceDetails;
当选择网格行时,绑定源会“自动”填充上面的文本框。完美的工作。
绑定导航器有一个很酷的按钮来添加行。点击它。它向网格添加一行。大。但是当选择新行时,绑定文本框没有任何变化。
我可能需要在bindingsource上处理“AddingNew”事件......
希望能帮助你更好地定义问题。
感谢您的帮助。
答案 0 :(得分:0)
自从我问这个问题已经有很长一段时间了,但它仍然受到关注,所以这里有一些额外的信息。我基本上创建了发票明细的新实例,并将其分配给事件NewObject。
所以我添加了一个在添加新行时触发的事件:
bsInvoiceDetails.AddingNew += new AddingNewEventHandler(bsInvoiceDetails_AddingNew);
以下是解雇的代码:
void bsInvoiceDetails_AddingNew(object sender, AddingNewEventArgs e)
{
try
{
InvoiceDetail id = new InvoiceDetail();
id.InvoiceID = invoice.InvoiceID; // Make sure we are hooked to this invoice.
id.DetailDate = DateTime.Today;
id.DetailQuantity = 0;
id.DetailRate = 0;
id.DetailTotal = 0;
id.DetailDescription = "* New Detail Description *";
e.NewObject = id;
}
catch (Exception ex)
{
ErrorManager em = new ErrorManager(ex, "InvoiceEditForm.cs", "bsInvoiceDetails_ListChanged", "Adding a new detail item", "sql");
}
}
我认为这就是解决这个问题所做的一切。如果这对您没有帮助解决问题,请随意发布另一个问题。