Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataGridView, переопределить столбец 
:(
    Опции темы
Springtime
Дата 2.6.2009, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Всем привет
в общем переопределил класс столбца у DataGridView

Код

    public class SDataGridComboBoxColumn : DataGridTextBoxColumn
    {
        public NoKeyUpCombo ColumnComboBox;
        private System.Windows.Forms.CurrencyManager _source;
        private int _rowNum;
        private bool _isEditing;
        public static int _RowCount;

        public SDataGridComboBoxColumn() : base()
        {
            _source = null;
            _isEditing = false;
            _RowCount = -1;

            ColumnComboBox = new NoKeyUpCombo();
            ColumnComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

            ColumnComboBox.Leave += new EventHandler(LeaveComboBox);
            //  ColumnComboBox.Enter += new EventHandler(ComboMadeCurrent); 
            ColumnComboBox.SelectionChangeCommitted += new EventHandler(ComboStartEditing);

        }
        private void ComboStartEditing(object sender, EventArgs e)
        {
            _isEditing = true;
            base.ColumnStartedEditing((Control)sender);
        }

        private void HandleScroll(object sender, EventArgs e)
        {
            if (ColumnComboBox.Visible)
                ColumnComboBox.Hide();

        }

        private void LeaveComboBox(object sender, EventArgs e)
        {
            if (_isEditing)
            {
                SetColumnValueAtRow(_source, _rowNum, ColumnComboBox.Text);
                _isEditing = false;
                Invalidate();
            }
            ColumnComboBox.Hide();
            this.DataGridTableStyle.DataGrid.Scroll -= new EventHandler(HandleScroll);

        }

        protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
        {


            base.Edit(source, rowNum, bounds, readOnly, instantText, cellIsVisible);

            _rowNum = rowNum;
            _source = source;

            ColumnComboBox.Parent = this.TextBox.Parent;
            ColumnComboBox.Location = this.TextBox.Location;
            ColumnComboBox.Size = new System.Drawing.Size(this.TextBox.Size.Width, ColumnComboBox.Size.Height);
            ColumnComboBox.SelectedIndex = ColumnComboBox.FindStringExact(this.TextBox.Text);
            ColumnComboBox.Text = this.TextBox.Text;
            this.TextBox.Visible = false;
            ColumnComboBox.Visible = true;
            this.DataGridTableStyle.DataGrid.Scroll += new EventHandler(HandleScroll);

            ColumnComboBox.BringToFront();
            ColumnComboBox.Focus();
        }

        protected override bool Commit(System.Windows.Forms.CurrencyManager dataSource, int rowNum)
        {
            if (_isEditing)
            {
                _isEditing = false;
                SetColumnValueAtRow(dataSource, rowNum, ColumnComboBox.Text);
            }
            return true;
        }

        protected override void ConcedeFocus()
        {
            Console.WriteLine("ConcedeFocus");
            base.ConcedeFocus();
        }

        protected override object GetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum)
        {

            object s = base.GetColumnValueAtRow(source, rowNum);
            System.Data.DataView dv = (System.Data.DataView)this.ColumnComboBox.DataSource;
            int rowCount = dv.Count;
            int i = 0;
            while (i < rowCount)
            {
                if (s.Equals(dv[i][this.ColumnComboBox.ValueMember]))
                    break;
                ++i;
            }

            if (i < rowCount)
                return dv[i][this.ColumnComboBox.DisplayMember];

            return DBNull.Value;
        }

        protected override void SetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum, object value)
        {
            object s = value;

            System.Data.DataView dv = (System.Data.DataView)this.ColumnComboBox.DataSource;
            int rowCount = dv.Count;
            int i = 0;
            while (i < rowCount)
            {
                if (s.Equals(dv[i][this.ColumnComboBox.DisplayMember]))
                    break;
                ++i;
            }
            if (i < rowCount)
                s = dv[i][this.ColumnComboBox.ValueMember];
            else
                s = DBNull.Value;
            base.SetColumnValueAtRow(source, rowNum, s);

        }
    }


На форме имеется компонент DataGridView, но никак не могу сообразить как переопределить один из имеющихся столбцов c этим классом.
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
Лен
Дата 2.6.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет



ИмяФормы.Designer.cs - ищешь нужные столбцы и подменяешь их конструкторы, а возможно, и определения.
PM MAIL   Вверх
Partizan
Дата 2.6.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



Springtime, насколько я помню можно и в дизайнере поменять тип колонки...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
diadiavova
Дата 2.6.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Я не очень понял вопрос, но если речь о том, чтобы иметь возможность в дизайнере добавлять в грид колонки собственного производства, то вот тут есть пример
http://www.rsdn.ru/article/dotnet/datagridfaq.xml#EEBAC
Там, конечно идёт речь о старом гриде, но принцип тот же: создаёшь свой грид, затеняешь в нём свойство Columns и назначаешь для него свой эдитор.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Partizan
Дата 2.6.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67





--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Springtime
Дата 9.6.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Цитата(Лен @ 2.6.2009,  13:20)
ИмяФормы.Designer.cs - ищешь нужные столбцы и подменяешь их конструкторы, а возможно, и определения.

ругается на this.dataGridView1.Columns.AddRange
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.