Непонятки с привязкой Richtextbox к Bindingsource

  • Автор темы apogee
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

apogee

#1
Кидаю на форму RichTextBox и привязываю его свойство "Text" к экземпляру типа BindingSource. Устанавливаю Data Source Update Mode в значение OnValidation. Таким образом, я ожидаю, что при потере RichTextBox'ом фокуса ввода у меня будет обновляться источник данных. В классе формы у меня есть обработчик события ListChanged типа BindingSource. Так вот, при потере фокуса ввода контролом RichTextBox ничего не происходит и обработчик события ListChanged не выполняется!!!
Что за беда? Что не так?
 
A

apogee

#2
Возможно, не совсем понятен вопрос. Вот пример.

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
class Test : Form
{
DataSet dsFruit = new DataSet();

[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.Run(new Test());
}
public Test()
{
Text = "Тестовая форма";
ClientSize = new Size(500, 300);
// Создаем таблицу
DataTable tbl = new DataTable("Fruit");
DataColumn col = tbl.Columns.Add("Description", typeof(string));
col.AllowDBNull = false;
dsFruit.Tables.Add(tbl);
// Заполняем таблицу дейтасета данными
DataRow row;
row = tbl.NewRow();
row["Description"] = "Яблоки";
tbl.Rows.Add(row);
row = tbl.NewRow();
row["Description"] = "Груши";
tbl.Rows.Add(row);
row = tbl.NewRow();
row["Description"] = "Персики";
tbl.Rows.Add(row);
// Теперь создаем экземпляр типа BindingSource, который будет
// источником данных для контролов, расположенных на форме.
BindingSource bsFruit = new BindingSource(dsFruit, "Fruit");
bsFruit.ListChanged += new System.ComponentModel.ListChangedEventHandler(bsFruit_ListChanged);
// Грид
DataGridView grid = new DataGridView();
grid.Parent = this;
grid.Location = new Point(5, 25);
grid.Size = new Size(300, 200);
grid.DataSource = bsFruit;
// RichTextBox
RichTextBox rtbx = new RichTextBox();
rtbx.Parent = this;
rtbx.Location = new Point(350, 25);
rtbx.Size = new Size(125, 200);
rtbx.DataBindings.Add("Text", bsFruit, "Description");
rtbx.DataBindings[0].DataSourceUpdateMode = DataSourceUpdateMode.OnValidation;
// Вспомагательный контрол. Сюда будем переводить фокус ввода
TextBox tbx = new TextBox();
tbx.Parent = this;
tbx.Location = new Point(5, 250);
}
// Вот здесь надо поставить точку останова
void bsFruit_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e)
{
}
}
Ставим точку прерывания в обработчике события ListChanged. Далее, редактируем любую строку в гриде и переводим мышкой курсор на TextBox. Обработчик выполняется. Теперь редактируем текст в RichTextBox и переводим курсор на TextBox. Обрабочик не выполняется!
 
Статус
Закрыто для дальнейших ответов.