如何在不使用.fill的情况下获取Bindingsource以查看使用TableAdapter.Update()方法添加的记录?

时间:2012-06-14 21:41:51

标签: winforms bindingsource

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

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

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

Mainform Code。效果很好。

         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;

SubForm代码。也很棒。

            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();

FAIL! bindingsource找不到新记录,在find上返回-1,默认为数据集中的第一条记录。

如果我将.fill方法放在对话框和主页面之间,那么一切正常,但需要一段时间来填充...七八秒钟。

我想我对绑定源的理解是不正常的,我假设如果底层数据集已更新,那么绑定源就会看到它。

所以,首先,如果某人有关于如何刷新绑定源而没有填充的建议我会很感激,如果有人可以解释为什么这样做,我可以找到解决方法。

由于

1 个答案:

答案 0 :(得分:0)

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