Проблема с ComboBox
От: SergunRu Россия  
Дата: 22.08.05 20:05
Оценка:
При использовании TreeView, у Node было свойство Tag, которое порой очень выручало... (там например можно хранить id из бд)...
Подскажите как решить аналогичную проблему в comboBox... у Item-ов там нету свойства Tag..
--
С уважением,
Сергей Звездин.
Re: Проблема с ComboBox
От: krasin Россия  
Дата: 22.08.05 20:12
Оценка:
Здравствуйте, SergunRu, Вы писали:

SR>При использовании TreeView, у Node было свойство Tag, которое порой очень выручало... (там например можно хранить id из бд)...

SR>Подскажите как решить аналогичную проблему в comboBox... у Item-ов там нету свойства Tag..

Зато у каждого элемента есть Text и Value. Храните id в Value.
Re[2]: Проблема с ComboBox
От: SergunRu Россия  
Дата: 23.08.05 03:26
Оценка:
Здравствуйте, krasin, Вы писали:

K>Здравствуйте, SergunRu, Вы писали:


SR>>При использовании TreeView, у Node было свойство Tag, которое порой очень выручало... (там например можно хранить id из бд)...

SR>>Подскажите как решить аналогичную проблему в comboBox... у Item-ов там нету свойства Tag..

K>Зато у каждого элемента есть Text и Value. Храните id в Value.


а можно кусочек кода? что-то не получается..
--
С уважением,
Сергей Звездин.
Re[3]: Проблема с ComboBox
От: Styx_ Россия  
Дата: 23.08.05 04:33
Оценка:
Здравствуйте, SergunRu, Вы писали:
SR> а можно кусочек кода? что-то не получается..

Что то в этом роде


struct User
{
int _id;
string _name;
}

ArrayList arr = new ArrayList();

combobox1.DataSource = arr;
combobox1.DisplayMember = "_name";
combobox1.ValueMember = "_id";
Styx
Re[4]: Проблема с ComboBox
От: SergunRu Россия  
Дата: 23.08.05 05:55
Оценка:
Здравствуйте, Styx_, Вы писали:

S_>
S_>struct User
S_>{
S_>int _id;
S_>string _name;
S_>}

S_>ArrayList arr = new ArrayList();

S_>combobox1.DataSource = arr;
S_>combobox1.DisplayMember = "_name";
S_>combobox1.ValueMember = "_id";
S_>



а как сделать через "combobox1.items.add(...)" ?
--
С уважением,
Сергей Звездин.
Re[5]: Проблема с ComboBox
От: Styx_ Россия  
Дата: 23.08.05 06:01
Оценка:
Здравствуйте, SergunRu, Вы писали:

SR> а как сделать через "combobox1.items.add(...)" ?


Это смотря что у тебя там, где троеточие???
Styx
Re: Проблема с ComboBox
От: seregaa Ниоткуда http://blogtani.ru
Дата: 23.08.05 07:34
Оценка: -1
Здравствуйте, SergunRu, Вы писали:

SR>Подскажите как решить аналогичную проблему в comboBox... у Item-ов там нету свойства Tag..


Создаешь свой класс — наследник Item-а, в который добавляешь недостающие свойства. В комбобокс добавляешь экземпляры своего класса.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re: Проблема с ComboBox
От: Блудов Павел Россия  
Дата: 23.08.05 09:24
Оценка:
Здравствуйте, SergunRu, Вы писали:

SR>Подскажите как решить аналогичную проблему в comboBox... у Item-ов там нету свойства Tag..

ComboBox хранит не строчки! Он хранит что угодно. Создайте свой класс со всеми нужными полями, и храните там что хотите.

Посмотрите в качестве примера Janus\Core\Navigation\NavigationBox.cs — это ComboBox, в котором вместо строцек живут объекты FeatureContainer:

    public class NavigationBox : ComboBox
    {
        private class FeatureContainer
        {
            public override string ToString()
            {
                string str = _feature.ToString();
                return str == null ? "" : str;
            }
        }
        /// <summary>
        /// <see cref="ComboBox.OnDrawItem"/>
        /// </summary>
        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            e.DrawBackground();
            if ((Site != null) && Site.DesignMode)
            {
                e.Graphics.DrawString("<design mode>", Font, Brushes.Gray, 0, 0);
            }
            if (e.Index >= 0)
            {
                Rectangle nb = e.Bounds;
                FeatureContainer cont = (FeatureContainer)Items[e.Index];
                e.Graphics.DrawString(cont.Feature.ToString(), 
                    !ni.Highlight ? Font : new Font(Font, FontStyle.Bold),
                    (e.State & DrawItemState.Selected) == 0 ? SystemBrushes.ControlText :
                    SystemBrushes.HighlightText, nb);
            }
        }
        
        private void FillFeatures(ITreeNode feature, int level)
        {
            foreach (IFeature f in feature)
            {
                Items.Add(new FeatureContainer(f, level));
                if (f.HasChildren)
                    FillFeatures(f, level + 1);
            }
        }
    }


Обратите внимание на выделенную строку: в Items помещаются объекты типа FeatureContainer, в OnDrawItem извлекаются и отрисовываются.
Можно, кстати, обойтись и без отрисовки вручную. В данном случае она просто использовалась для рисования иконок
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[4]: Проблема с ComboBox
От: vladsoft  
Дата: 24.08.05 11:19
Оценка:
Здравствуйте, Styx_, Вы писали:

S_>Здравствуйте, SergunRu, Вы писали:

SR>> а можно кусочек кода? что-то не получается..

S_>Что то в этом роде



S_>
S_>struct User
S_>{
S_>int _id;
S_>string _name;
S_>}

S_>ArrayList arr = new ArrayList();

S_>combobox1.DataSource = arr;
S_>combobox1.DisplayMember = "_name";
S_>combobox1.ValueMember = "_id";


S_>

Сейчас борюсь с аналогичной проблемой, но при реализации предложенного способа возникли ошибки, вот мой код:

struct cmbData
    {
        public string name;
        public string field;
        public cmbData(string Aname, string Afield) {
            name = Aname;
            field = Afield;
        }
    }
// кусок кода из функции:
ArrayList arr = new ArrayList();
            this.cbColumnSearch.Items.Clear();
           if (this.gvFirm.ColumnCount > 0)
            {
                foreach (DataGridViewColumn CurrentColumn in this.gvFirm.Columns)
                {
                    cmbData cmb = new cmbData(CurrentColumn.HeaderText,CurrentColumn.DataPropertyName);
                    arr.Add(cmb);
                    //this.cbColumnSearch.Items.Add(CurrentColumn.HeaderText);
                }
               cbColumnSearch.DataSource = arr;
               cbColumnSearch.DisplayMember = "name";
               cbColumnSearch.ValueMember = "field"; // здесь вот и вылетает проблема, то есть появляется ошибка: 
//Cannot bind to the new display member.
//Parameter name: newDisplayMember

В чем проблема?
Re[5]: Проблема с ComboBox
От: Styx_ Россия  
Дата: 24.08.05 11:32
Оценка:
Здравствуйте, vladsoft, Вы писали:

V>Сейчас борюсь с аналогичной проблемой, но при реализации предложенного способа возникли ошибки, вот мой код:

V>

V>struct cmbData
V>    {
V>        public string name;
V>        public string field;
V>        public cmbData(string Aname, string Afield) {
V>            name = Aname;
V>            field = Afield;
V>        }
V>    }
V>// кусок кода из функции:
V>ArrayList arr = new ArrayList();
V>            this.cbColumnSearch.Items.Clear();
V>           if (this.gvFirm.ColumnCount > 0)
V>            {
V>                foreach (DataGridViewColumn CurrentColumn in this.gvFirm.Columns)
V>                {
V>                    cmbData cmb = new cmbData(CurrentColumn.HeaderText,CurrentColumn.DataPropertyName);
V>                    arr.Add(cmb);
V>                    //this.cbColumnSearch.Items.Add(CurrentColumn.HeaderText);
V>                }
V>               cbColumnSearch.DataSource = arr;
V>               cbColumnSearch.DisplayMember = "name";
V>               cbColumnSearch.ValueMember = "field"; // здесь вот и вылетает проблема, то есть появляется ошибка: 
V>//Cannot bind to the new display member.
V>//Parameter name: newDisplayMember
V>

V>В чем проблема?
V>

Попробуй так:

V>

V>class cmbData
V>    {
V>        public string name;
V>        public string field;
V>        public cmbData(string Aname, string Afield) {
V>            name = Aname;
V>            field = Afield;
V>        }
          
public string Name
{
get { return name; } 
}

public string Field
{
get { return field; } 
}

V>    }
V>// кусок кода из функции:
V>ArrayList arr = new ArrayList();
V>            this.cbColumnSearch.Items.Clear();
V>           if (this.gvFirm.ColumnCount > 0)
V>            {
V>                foreach (DataGridViewColumn CurrentColumn in this.gvFirm.Columns)
V>                {
V>                    cmbData cmb = new cmbData(CurrentColumn.HeaderText,CurrentColumn.DataPropertyName);
V>                    arr.Add(cmb);
V>                    //this.cbColumnSearch.Items.Add(CurrentColumn.HeaderText);
V>                }
V>               cbColumnSearch.DataSource = arr;
               cbColumnSearch.DisplayMember = "Name";
               cbColumnSearch.ValueMember = "Field"; // здесь вот и вылетает проблема, то есть появляется ошибка: 
V>//Cannot bind to the new display member.
V>//Parameter name: newDisplayMember
V>
Styx
Re: Проблема с ComboBox
От: Аноним  
Дата: 22.08.05 20:21
Оценка:
Еще можно хранить объекты своего тип или вообще, унаследоваться от Combo и расширить возможости
--
VBStreets, Editor-in-Chief
http://blogs.gotdotnet.ru/personal/gaidar/

What is a rigorous definition of rigor?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.