【问题标题】:How Do I get a Bindingsource to see a record added with the TableAdapter.Update() method without using .fill?如何在不使用 .fill 的情况下让 Bindingsource 查看使用 TableAdapter.Update() 方法添加的记录?
【发布时间】:2012-06-16 23:20:07
【问题描述】:

我有一个大型数据集,在页面加载时使用填充方法加载。

然后,可以将一条记录添加到数据集中。

所有这些都可以正常工作,但我可以让绑定源识别新记录的唯一方法是执行填充方法。这也有效,但存在性能问题。为什么绑定源看不到数据集中的新记录?

主窗体代码。效果很好。

         DialogResult returnFormVal;

        Schedulers.DataSets.SchedOneFetch.WOMainFetchRow newRow = schedOneFetch.WOMainFetch.NewWOMainFetchRow();

        Schedulers.Forms.NewWorkOrder genReport = new Schedulers.Forms.NewWorkOrder(ref newRow);

        Int32 picNumber;

        returnFormVal = genReport.ShowDialog();

        schedOneFetch.WOMainFetch.Rows.Add(newRow);

        wOMainFetchBindingSource.EndEdit();

        wOMainFetchTableAdapter.Adapter.Update(schedOneFetch.WOMainFetch);

        Int32 passBackVal = newRow.DISID;

子表单代码。效果也很好。

            passBackRow.DISDueDate = monthCalendar1.SelectionStart;

            passBackRow.DISID = 99999999;

            if (ckbEqpt.Checked == true & lbProcNum.Items.Count > 0)
            {
                passBackRow.DISEquip = Convert.ToInt32(lbProcNum.SelectedValue.ToString());
            }
            else
            {
                passBackRow.DISEquip = 0;
            }


            passBackRow.DISLineNumber = Convert.ToInt32(lbLineName.SelectedValue.ToString());

            passBackRow.DISManHours = Convert.ToInt32(nudEstTotTime.Value);

            passBackRow.DISNumberAss = Convert.ToInt32(nudEstTM.Value);

            passBackRow.DISOpenDate = DateTime.Now;

            passBackRow.DISOriginator = userID.DBUserID;

            passBackRow.DISRequestor = 0;

            passBackRow.DISResponsible = Convert.ToInt32(lbRespons.SelectedValue.ToString());

            passBackRow.DISType = Convert.ToInt32(lbType.SelectedValue.ToString());

            passBackRow.DISWorkAccomp = "";

            passBackRow.DISWorkRequired = rtbWorkReq.Text;

            passBackRow.MLID = 0;

            passBackRow.LIID = 0;

            passBackVal = 0;

            this.Close();

将控件返回到主窗体。新记录已添加到数据库中。

                wOMainFetchBindingSource.Position = wOMainFetchBindingSource.Find("DISID", passBackVal);


            DataRowView dtaRow = (DataRowView)wOMainFetchBindingSource.Current;

            String woID = dtaRow["DISID"].ToString();

失败! bindingsource 不会找到新记录,在找到时返回 -1 并默认为数据集中的第一条记录。

如果我将 .fill 方法放在对话框和主页之间,则一切正常,但需要很长时间才能完成填充……七八秒。

我猜我对绑定源的理解是有问题的,我曾假设如果基础数据集被更新,那么绑定源会看到它。

所以,首先,如果有人对如何在没有填充的情况下刷新绑定源有建议,我将不胜感激,如果有人能解释为什么会这样,我可能会找到解决方法。

谢谢

【问题讨论】:

    标签: winforms bindingsource


    【解决方案1】:

    我对 Bindingsource 的理解是正确的,它看到了添加的新记录。问题是数据集从视图中获取信息。 add new 方法仅填充基表中的字段。其他字段,即由视图组装的字段,在 tableadapter 使用填充方法重新读取之前不会填充。除了填充新记录的每个字段之外,我没有看到解决此问题的方法,最大的缺点是每当视图或视图中组装的任何表发生更改时,您都必须确保更改代码。我将改为减少每次填充时加载的记录数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-05
      • 2019-10-08
      • 2015-07-08
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多