绑定文本框不显示添加新行

时间:2012-09-11 19:38:03

标签: c# winforms data-binding bindingsource databound-controls

我正在使用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”事件......

希望能帮助你更好地定义问题。

感谢您的帮助。

1 个答案:

答案 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");
        }
    }

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