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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где хранить ID записи? Посоветуйте... 
V
    Опции темы
psiallon
Дата 2.9.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте уважаемые форумчане. До этого программировал под Web, но недавно решил покурить WinForms, и возник вопрос.

Имеется ComboBox, который содержит данные поля из таблицы БД, есть кнопка при нажатии на которую выбранный в ComboBox элемент должен удалиться из базы данных. Проблема в том, что где-то надо хранить ID записи. Например программируя под Web, это делалось так:
Код

<select name="list">
<option value="1">Поле с ID=1</option>
<option value="2">Поле с ID=2</option>
</select>

Можно ли реализовать, что-то подобное в WinForms?

Сейчас храню идентификаторы в массиве, который имеет такой-же порядок элементов как и в ComboBox... Мне кажется это ужасным, наверняка есть какой-нибудь выход...

Спасибо.
PM MAIL ICQ   Вверх
diadiavova
Дата 2.9.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Элементом в комбобоксе может быть объект любого типа. Соответственно он может иметь любые свойства и хранить любые данные. Отображаться при этом будет для каждого объекта значение свойства, имя которого надо указать в свойстве DisplayMember самого комбобокса. Если оно не указано, то выводится строка, которую возвращает метод ToString объекта.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

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



проще всего использовать ArrayList или List<> , можно сказать что это массивы с переменной длинной, хотя это конечно производные от LinkedList. Доступ к членам возможен и по индексу.


--------------------
user posted image
PM MAIL   Вверх
diadiavova
Дата 2.9.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ну да, конечно, "городушки городить" оно всегда проще.


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


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


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

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



Код

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var cb = new ComboBox();
            this.Controls.Add(cb);
            cb.Items.Add(new MyItem() { Id = 1, Value = "Поле 1" });
            cb.Items.Add(new MyItem() { Id = 1, Value = "Поле 2" });
            cb.DisplayMember = "Value";
           
            cb.SelectedIndexChanged += new EventHandler(cb_SelectedIndexChanged);
        }

        void cb_SelectedIndexChanged(object sender, EventArgs e)
        {
            var cb=((ComboBox)sender);
            var si=(MyItem)cb.SelectedItem;
            var dispText = string.Format("Selected Item\n\rValue = {0} \n\rId = {1}", 
                si.Value, si.Id.ToString());
            MessageBox.Show(dispText);
        }
    }
    public class MyItem
    {
        public string Value{get;set;}
        public int Id { get; set; }
    }



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


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

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



Цитата(diadiavova @  2.9.2009,  19:24 Найти цитируемый пост)
Ну да, конечно, "городушки городить" оно всегда проще. 

да, в радиокружке я был мастер "навесного монтажа" smile 


--------------------
user posted image
PM MAIL   Вверх
diadiavova
Дата 2.9.2009, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Heinzz @  2.9.2009,  21:08 Найти цитируемый пост)
да, в радиокружке я был мастер "навесного монтажа"

 smile 


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


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(diadiavova @  2.9.2009,  18:55 Найти цитируемый пост)
Если оно не указано, то выводится строка, которую возвращает метод ToString объекта.

Не совсем - Convert.ToString, точнее smile 

Цитата(Heinzz @  2.9.2009,  18:56 Найти цитируемый пост)
ArrayList или List<>

Первое ныне бессмысленно.

Цитата(Heinzz @  2.9.2009,  18:56 Найти цитируемый пост)
ArrayList или List<> , можно сказать что это массивы с переменной длинной, хотя это конечно производные от LinkedList.

Никакого отношения к LinkedList они не имеют. Первые - массив, расширяемый по мере надобности, второе - связанный список.


--------------------
PM MAIL ICQ Skype   Вверх
Heinzz
Дата 2.9.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

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



Цитата(Любитель @  2.9.2009,  20:22 Найти цитируемый пост)
Никакого отношения к LinkedList они не имеют. Первые - массив, расширяемый по мере надобности, второе - связанный список. 

так LinkedList это ж и есть связанный список

наврал я  smile 
Цитата(MSDN)
Класс List<T> является универсальным эквивалентом класса ArrayList. Он реализует универсальный интерфейс IList<T> с помощью массива, размер которого динамически увеличивается по мере необходимости.



Это сообщение отредактировал(а) Heinzz - 2.9.2009, 20:36


--------------------
user posted image
PM MAIL   Вверх
psiallon
Дата 2.9.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо всем большое, очень помогли. smile 
PM MAIL ICQ   Вверх
Любитель
Дата 2.9.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(Heinzz @  2.9.2009,  20:27 Найти цитируемый пост)
так LinkedList это ж и есть связанный список

Я ж написал, "первые". Всмысле ArrayList и его дженерик-аналог List<T>. А второй - LinkedList.


--------------------
PM MAIL ICQ Skype   Вверх
psiallon
Дата 3.9.2009, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все таки нашел более элегантное решение с databinding:
Код

        private DataTestEntities data = new DataTestEntities();

        private void MainForm_Load(object sender, EventArgs e)
        {
            ComboBox cb = new ComboBox();
            cb.DropDownStyle = ComboBoxStyle.DropDownList;
            cb.DisplayMember = "Name";
            cb.ValueMember = "Id";
            cb.SelectedValueChanged += new EventHandler(cb_SelectedValueChanged);
            cb.DataSource = data.Products;
            Controls.Add(cb);
        }

        void cb_SelectedValueChanged(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)sender;
            MessageBox.Show("ID = " + cb.SelectedValue);
        }

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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