1

我正在使用绑定到绑定源(在代码中设置)的数据网格视图、绑定导航器和文本框。当我在网格中选择行时,内容显示在文本框中,一切都很好。

txtQty.DataBindings.Add("Text", bsInvoiceDetails, "Detail_Quantity");

接下来,我单击绑定导航器上的添加。它在数据网格中添加了一个空白行,这很好,但它不会清除文本框。网格中突出显示的行是不同的行。当我手动选择新行时,文本框仍然没有改变。

如果我在网格中选择新行的情况下输入 texboxes,它实际上会更改不同的行值。

我不明白为什么这是我们的解决方法。

  • 帮助

更新:

运行查询,返回数据表...将其附加到数据集...数据集是绑定源的数据源...

dsInvoiceDetails = new 
dsInvoiceDetails.Tables.Add(dtInvoiceDetails);

bsInvoiceDetails.DataSource = dsInvoiceDetails;
bsInvoiceDetails.DataMember = "Invoice_Detail";

将网格和绑定导航器挂钩到绑定源的代码...

gridInvoiceDetails.DataSource = bsInvoiceDetails;
bnInvoiceDetails.BindingSource = bsInvoiceDetails;

选择网格行时,绑定源“自动”填充上方的文本框。完美运行。

绑定导航器有一个很酷的按钮来添加行。点击那个。它在网格中添加一行。伟大的。But when the new row is selected nothing changed with the bound text boxes.

我可能需要处理绑定源上的“AddingNew”事件......

希望这有助于为您定义更多的问题。

谢谢您的帮助。

4

1 回答 1

1

自从我问这个问题已经很久了,但它继续受到关注,所以这里有一些额外的信息。我基本上创建了发票详细信息的新实例并将其分配给事件 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");
        }
    }

我认为这就是我为解决这个问题所做的一切。如果这不能帮助您解决问题,请随时发布另一个问题。

于 2017-10-17T16:46:21.123 回答