none
VS2010 Обновить ComboboxColumn в DataGridView RRS feed

  • Вопрос

  • Здравствуйте!

    У меня есть  ComboboxColumn в DataGridView. У него есть DataSource - таблица dt. кот. я обновляю при извне (не в этом DataGridView). Как при этом обновить значение в колонке ComboboxColumn ?

Ответы

  • Добрый день.

    Не очень понятен вопрос. У вас в другом месте меняется значение в таблице (DataTable) и вы хотите чтобы изменения отобразились в DataGridView? Если да, то их изменение отображается нормально. Вот тестовый пример. На форме DataGridView и кнопка. Вот код:

    public partial class Form1 : Form
    {
        DataTable dt = new DataTable();
        public Form1()
        {
            InitializeComponent();
            dt.Columns.Add("IsChecked", typeof(bool));
            dt.Rows.Add(true);
            dt.Rows.Add(false);
            dt.Rows.Add(true);
            dataGridView1.DataSource = dt;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            dt.Rows[0][0] = !((bool)dt.Rows[0][0]);
            dt.Rows[1][0] = !((bool)dt.Rows[1][0]);
        }
    }

    При клике на кнопке, в первых двух ячейках изменяется значение. Да, чуть не забыл. В DataGridView надо добавить 1 столбец привязав его к полю IsChecked. Вот исходники.
    Отвечающий

Все ответы

  • Добрый день.

    Не очень понятен вопрос. У вас в другом месте меняется значение в таблице (DataTable) и вы хотите чтобы изменения отобразились в DataGridView? Если да, то их изменение отображается нормально. Вот тестовый пример. На форме DataGridView и кнопка. Вот код:

    public partial class Form1 : Form
    {
        DataTable dt = new DataTable();
        public Form1()
        {
            InitializeComponent();
            dt.Columns.Add("IsChecked", typeof(bool));
            dt.Rows.Add(true);
            dt.Rows.Add(false);
            dt.Rows.Add(true);
            dataGridView1.DataSource = dt;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            dt.Rows[0][0] = !((bool)dt.Rows[0][0]);
            dt.Rows[1][0] = !((bool)dt.Rows[1][0]);
        }
    }

    При клике на кнопке, в первых двух ячейках изменяется значение. Да, чуть не забыл. В DataGridView надо добавить 1 столбец привязав его к полю IsChecked. Вот исходники.
    Отвечающий
  • Пожалуйста, не бросайте топик без ответа, если ответ решает проблему, то отметьте его с помощью кнопки 'Пометить как ответ'. Спасибо.


    Для связи [mail]

  • Извините, у меня не было интернета 2 дня из-за аварии. Я неточно выразился. Я хочу, чтобы  Combobox Column базировался на некой таблице dt в базе данных, но при этом значение, которого нет в этой таблице, можно было ввести вручную в поле этой колонки в DataGridView (кот. базируется на основной таблице). Ввод заканчивается клавишей Enter, поэтому я использую событие  Protected Overrides Function ProcessDialogKey , кот. отлавливает нажатие клавиш. В этом событии я проверяю введенное значение на предмет его нахождения в dt, если этого значения нет - меняю источник данных (dt), добавляя к нему нужное значение, присваиваю этот новый источник данных  Combobox Column (это значение появляется в выпадающем списке Combobox Column и я могу его выбрать), присваиваю в основной таблице (в поле .DataPropertyName) нужную величину. Но - текущей ячейке (в которой происходит ввод и кот., по идее должна обновляться вслед за основной таблицей) не присваивается введенное значение.(Кстати, если форму закрыть, а потом открыть - то в ячейке нужное значение!). Вот у меня и вопрос - как обновить Combobox Column , если в основную таблицу вносятся изменения?

    Извините за многословие, пытался все объяснить.

  • Наоборот здорово, что вы так описали чего хотите добиться, проще будет вам помочь.


    Для связи [mail]

  • Неужто никто не знает? Ведь это классическая задача "Отсутствия в списке",. Просто в Combobox получается, а вот в combobox Column в DataGridView1 - нет
    2 июня 2012 г. 17:31