gpt4 book ai didi

C# 从 BindingSource 刷新文本框

转载 作者:行者123 更新时间:2023-11-30 16:37:01 25 4
gpt4 key购买 nike

我在刷新使用 BindingSource 对象的 Windows 窗体控件时遇到困难。我们有一个 CAB/MVP/SCSF 客户端,我(实际上是“我们”,因为这是一个团队的努力)正在开发,它将与远程服务器上运行的 WCF 服务交互。 (这是我们的第一次尝试,所以我们处于学习模式)。对服务的调用(来自演示者)之一返回一个数据集,其中包含 3 个数据表,名为“契约(Contract)”、“贷款”和“条款”。每个表只包含一行。当服务返回数据集时,我们将其存储在 SmartPart/View 的类成员变量中,方法是在 View 中调用一个名为 BindData() 的函数,并将数据集从演示者类传递到 View ;

private System.Data.DataSet _ds = null;
public void BindData(System.Data.DataSet ds)
{
string sErr = "";
try
{
_ds = ds; // save to private member variable

// more code goes down here
}
}

我们试图将三个 DataTable 中的每一个绑定(bind)到一系列 Windows Forms TextBoxes、MaskedEditBoxes 和 Infragistics UltraComboEditor Dropdown 组合框我们使用 VS2008 IDE 创建了三个 BindingSource 对象,每个 DataTable 一个。

private System.Windows.Forms.BindingSource bindsrcContract;
private System.Windows.Forms.BindingSource bindsrcLoan;
private System.Windows.Forms.BindingSource bindsrcTerms;

我们像这样绑定(bind)值

if (bindsrcContract.DataSource == null)
{
bindsrcContract.DataSource = _ds;
bindsrcContract.DataMember = “contract”;

txtContract.DataBindings.Add(new Binding("Text", bindsrcContract, "contract_id", true));

txtLateFeeAmt.DataBindings.Add(new Binding("Text", bindsrcContract, "fee_code", true));

txtPrePayPenalty.DataBindings.Add(new Binding("Text", bindsrcContract, "prepay_penalty", true));

txtLateFeeDays.DataBindings.Add(new Binding("Text", bindsrcContract, "late_days", true));
}

if (bindsrcLoan.DataSource == null)
{
bindsrcLoan.DataSource = _ds;
bindsrcLoan.DataMember = “loan”;

mskRecvDate.DataBindings.Add(new Binding("Text", bindsrcLoan, "receive_date", true));

cmboDocsRcvd.DataBindings.Add(new Binding("Value", bindsrcLoan, "docs", true));
}

当我们第一次从服务中读取并取回数据集时,这会起作用。信息显示在表单的控件上,我们可以使用表单更新它,然后通过将更改后的值传回 WCF 服务来“保存”它。

这是我们的问题。如果我们选择不同的贷款 key 并对服务进行相同的调用并获得一个新的数据集,同样有 3 个表,每行一行,控件(文本框、屏蔽编辑框等)不会用新信息更新.请注意,smartPart/View 没有关闭或其他任何东西,而是在服务调用之间保持加载状态。在第二次调用中,我们没有重新绑定(bind)调用,而只是尝试从更新的 DataSet 中获取要刷新的数据。

我们已经尝试了我们能想到的一切,但显然我们遗漏了一些东西。这是我们第一次尝试使用 BindingSource 控件。我们已经尝试过

bindsrcContract.ResetBindings(false);

bindsrcContract.ResetBindings(true);

bindsrcContract.RaiseListChangedEvents = true;

for (int i = 0; i < bindsrcContract.Count; i++)
{
bindsrcContract.ResetItem(i);
}

以及再次重置 DataMember 属性。

bindsrcContract.DataMember = ”Contract”;

我们看过很多例子。许多示例都引用了 BindingNavigator,但由于 DataTables 只有一行,我们认为我们不需要它。网格的例子有很多,但我们在这里不一一列举。任何人都可以指出我们哪里出了问题,或者向我们指出可以提供更多信息的资源吗?

我们使用 VisualStudio 2008、C# 和 .Net 2.0、XP 客户端、W2K3 服务器。

提前致谢

我们

最佳答案

我今天遇到了类似的问题,发现它有效。

private void btnCancel_Click(object sender, EventArgs e)
{
this.MyTable.RejectChanges();
this.txtMyBoundTextBox.DataBindings[0].ReadValue();
this.EditState = EditStates.NotEditting;
}

关于C# 从 BindingSource 刷新文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/244640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com