У меня возникают проблемы с обновлением элементов форм Windows, использующих объект BindingSource. У нас есть клиент CAB/MVP/SCSF, который я (на самом деле «мы», так как это команда) разрабатывает, который будет взаимодействовать с службами WCF, запущенными на удаленном сервере. (Это наша первая попытка, поэтому мы находимся в режиме обучения). Один из вызовов (из Presenter) в службу возвращает DataSet, который содержит 3 DataTables под названием «Контракт», «Кредит» и «Условия». Каждая таблица содержит только одну строку. Когда служба возвращает набор данных, мы сохраняем его в SmartPart/View в переменной-члене класса, вызывая функцию в представлении BindData() и передавая набор данных в представление из класса презентатора;C# обновляющее текстовое поле от BindingSource
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
}
}
Мы пытаемся связать каждую из трех DataTables к ассортименту Windows Forms TextBoxes, MaskedEditBoxes и Infragistics UltraComboEditor DropDown ComboBoxes Мы создали три объекта BindingSource, по одному для каждого DataTable с помощью VS2008 IDE.
private System.Windows.Forms.BindingSource bindsrcContract;
private System.Windows.Forms.BindingSource bindsrcLoan;
private System.Windows.Forms.BindingSource bindsrcTerms;
Мы связывание значения, как этот
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.
Вот наша проблема. Если мы выберем другой ключ кредита и сделаем тот же вызов службе и получим новый DataSet, снова с 3 таблицами с одной строкой каждый, элементы управления (текстовые поля, маскированные поля редактирования и т. Д.) Не обновляются новой информацией , Обратите внимание, что smartPart/View не закрыт или что-то еще, но остается загруженным между вызовами службы. Во втором вызове мы не перебиваем вызовы, а просто пытаемся восстановить данные из обновленного DataSet.
Мы пробовали все, о чем мы можем думать, но, очевидно, мы чего-то не замечаем. Это наша первая попытка использовать элемент управления BindingSource. Мы попытались
bindsrcContract.ResetBindings(false);
и
bindsrcContract.ResetBindings(true);
и
bindsrcContract.RaiseListChangedEvents = true;
и
for (int i = 0; i < bindsrcContract.Count; i++)
{
bindsrcContract.ResetItem(i);
}
Как и снова сбросить свойство DataMember.
Мы рассмотрели множество примеров. Многие примеры ссылаются на BindingNavigator, но поскольку DataTables имеет только одну строку, мы не думали, что нам это нужно. Есть много примеров для сеток, но мы не используем их здесь. Может ли кто-нибудь указать, где мы ошибаемся, или указать нам на ресурсы, которые предоставят дополнительную информацию?
Мы используем клиент VisualStudio 2008, C# и .Net 2.0, XP, сервер W2K3.
Заранее спасибо
Wes
TToni, спасибо за полезное объяснение. BTW, OP не может повышать ставку на 11 (или 1 после перерегистрации) точек репутации;) – Alan