0

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

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

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

主窗体代码。效果很好。

         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 方法放在对话框和主页之间,那么一切正常,但需要很长时间才能完成填充……七八秒。

我想我对绑定源的理解是无效的,我假设如果基础数据集被更新,那么绑定源会看到它。

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

谢谢

4

1 回答 1

0

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

于 2012-06-16T15:20:07.017 回答