Связанные текстовые поля не показывают добавление новой строки
Я использую datagridview, bindingnavigator и текстовые поля, подключенные к источнику привязки (установлен в коде). Когда я выбираю строку в сетке, содержимое отображается в текстовых полях, все хорошо.
txtQty.DataBindings.Add("Text", bsInvoiceDetails, "Detail_Quantity");
Далее я нажимаю на кнопку добавления в обязательном навигаторе. Он добавляет пустую строку в сетку данных, что нормально, но не очищает текстовые поля. Выделенная строка в сетке - это другая строка. Когда я вручную выбираю новую строку, текстовые поля все еще не меняются.
Если я наберу текстовые поля с новой строкой, выбранной в сетке, это фактически изменит значения других строк.
Я не могу понять, почему это наш, как это исправить.
- Помогите
Обновить:
Запустил запрос, возвратил объект данных... прикрепил его к набору данных... набор данных является источником данных для источника связывания...
dsInvoiceDetails = new
dsInvoiceDetails.Tables.Add(dtInvoiceDetails);
bsInvoiceDetails.DataSource = dsInvoiceDetails;
bsInvoiceDetails.DataMember = "Invoice_Detail";
Код для подключения сетки и навигатора привязки к источнику привязки...
gridInvoiceDetails.DataSource = bsInvoiceDetails;
bnInvoiceDetails.BindingSource = bsInvoiceDetails;
Источник привязки заполняет текстовые поля выше "автоматически" при выборе строки сетки. Работает отлично.
Навигатор привязки имеет классную кнопку для добавления строк. Нажмите на это. Это добавляет строку в сетку. Отлично. Но когда новая строка выбрана, ничто не изменилось со связанными текстовыми полями.
Мне может понадобиться обработать событие "AddingNew" в bindingsource...
Надеюсь, что это поможет определить вопрос немного больше для вас.
Спасибо за помощь.
1 ответ
Прошло много времени с тех пор, как я спрашивал об этом, но это продолжает привлекать внимание, поэтому вот некоторая дополнительная информация. Я в основном создаю новый экземпляр детали счета и назначаю его событиям NewObject.
Поэтому я добавил событие, которое срабатывает при добавлении новой строки:
bsInvoiceDetails.AddingNew += new AddingNewEventHandler(bsInvoiceDetails_AddingNew);
И вот код сработал:
void bsInvoiceDetails_AddingNew(object sender, AddingNewEventArgs e)
{
try
{
InvoiceDetail id = new InvoiceDetail();
id.InvoiceID = invoice.InvoiceID; // Make sure we are hooked to this invoice.
id.DetailDate = DateTime.Today;
id.DetailQuantity = 0;
id.DetailRate = 0;
id.DetailTotal = 0;
id.DetailDescription = "* New Detail Description *";
e.NewObject = id;
}
catch (Exception ex)
{
ErrorManager em = new ErrorManager(ex, "InvoiceEditForm.cs", "bsInvoiceDetails_ListChanged", "Adding a new detail item", "sql");
}
}
Я думаю, что это все, что я сделал, чтобы обойти проблему. Не стесняйтесь задавать другой вопрос, если это не поможет решить проблему для вас.