Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Жакуй
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 21
1

из combobox в button

04.05.2013, 20:42. Просмотров 803. Ответов 7
Метки нет (Все метки)

Всем привет!

Такая задача. Из базы данных формируется список combobox. Хочу при нажатии на кнопку удалить выбранную запись в БД. Я так понимаю нужно выбранное значение из списка передать на кнопку и в кнопке сформировать запрос на удаление. Запрос сформировал, а из combobox не знаю как получить выбранное значение что бы удалить нужную строку.

Значение передаётся в виде id строки.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2013, 20:42
Ответы с готовыми решениями:

Установить выбранное значение в первом combobox во второй combobox
Добрый день! Есть вопрос: Есть 2 формы, на каждой из форм есть по одному...

Вывод значений в comboBox, связанных с другим comboBox
как сделать вывод в combobox2, если оно зависит от выбора значения comboBox1....

Заполнение ComboBox в соответствии со значением другого ComboBox
Значицца имеются, например, две таблички: Дисциплина (Математика, История,...

Button и TreeView
Доброго времени суток. Подскажите пожалуйста, нужно чтобы при нажатии на кнопку...

DatagridViewCellStyle -> Button
Здравствуйте товарищи программеры! Вопрос у мня возник. Получаю я от базы...

7
Монфрид
1212 / 1022 / 293
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
04.05.2013, 21:01 2
C#
1
combobox1.SelectedValue.ToString();
вернёт значение ValueMember
1
Жакуй
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 21
04.05.2013, 22:33  [ТС] 3
Помучился и выдаёт следующую ошибку

Дополнительные сведения: Не удалось привести тип объекта "System.Windows.Forms.Button" к типу "System.Windows.Forms.ComboBox".
0
rsotun
60 / 60 / 13
Регистрация: 20.04.2010
Сообщений: 456
05.05.2013, 00:26 4
Цитата Сообщение от Жакуй Посмотреть сообщение
Помучился и выдаёт следующую ошибку

Дополнительные сведения: Не удалось привести тип объекта "System.Windows.Forms.Button" к типу "System.Windows.Forms.ComboBox".
А что вы делаете? Можно код? Выдает ошибку правильно ... Несоответствие типов данных...
1
Жакуй
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 21
05.05.2013, 00:41  [ТС] 5
сделал немного по другому, только пришлось выставить событие combobox SelectedIndexChanged - DelCategoryCencel_Click и срабатывает сразу как только выбрал пункт в combobox, в противном случае ошибка Не удалось привести тип объекта "System.Windows.Forms.Button" к типу "System.Windows.Forms.ComboBox".
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public partial class DelCategory : Form
    {
        public DelCategory()
        {
            InitializeComponent();
        }
 
        private void DelCategory_Load(object sender, EventArgs e)
        {            
            var connect = new MySqlConnection(Constants.DB);
            connect.Open();
            try
            {
                var cmd = connect.CreateCommand();
                cmd.CommandText = "SELECT * FROM category_components";
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    var c = new Category();
                    c.FillFromReader(reader);
                    comboBox1.Items.Add(c);                    
                }
 
                reader.Close();
            }
            finally
            {
                connect.Close();
            }
            
        }
 
        private void DelCategoryCencel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void DelCategoryOk_Click(object sender, EventArgs e)
        {
            var connect = new MySqlConnection(Constants.DB);
            connect.Open();            
            try
            {
                var cmd = connect.CreateCommand();
                var cb = (ComboBox)sender;
                var c = (Category)cb.Items[cb.SelectedIndex];
                cmd.CommandText = string.Format("DELETE FROM category_components "+
                                                "WHERE id_category=@ID");
                cmd.Parameters.AddWithValue("@ID", c.ID);
                cmd.ExecuteNonQuery();
            }
            finally
            {
                connect.Close();
            }
            MessageBox.Show("Категория удалена");
            this.Close();
        }
    }
0
rsotun
60 / 60 / 13
Регистрация: 20.04.2010
Сообщений: 456
05.05.2013, 01:21 6
Цитата Сообщение от Жакуй Посмотреть сообщение
сделал немного по другому, только пришлось выставить событие combobox SelectedIndexChanged - DelCategoryCencel_Click и срабатывает сразу как только выбрал пункт в combobox, в противном случае ошибка Не удалось привести тип объекта "System.Windows.Forms.Button" к типу "System.Windows.Forms.ComboBox".
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public partial class DelCategory : Form
    {
        public DelCategory()
        {
            InitializeComponent();
        }
 
        private void DelCategory_Load(object sender, EventArgs e)
        {            
            var connect = new MySqlConnection(Constants.DB);
            connect.Open();
            try
            {
                var cmd = connect.CreateCommand();
                cmd.CommandText = "SELECT * FROM category_components";
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    var c = new Category();
                    c.FillFromReader(reader);
                    comboBox1.Items.Add(c);                    
                }
 
                reader.Close();
            }
            finally
            {
                connect.Close();
            }
            
        }
 
        private void DelCategoryCencel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void DelCategoryOk_Click(object sender, EventArgs e)
        {
            var connect = new MySqlConnection(Constants.DB);
            connect.Open();            
            try
            {
                var cmd = connect.CreateCommand();
                var cb = (ComboBox)sender;
                var c = (Category)cb.Items[cb.SelectedIndex];
                cmd.CommandText = string.Format("DELETE FROM category_components "+
                                                "WHERE id_category=@ID");
                cmd.Parameters.AddWithValue("@ID", c.ID);
                cmd.ExecuteNonQuery();
            }
            finally
            {
                connect.Close();
            }
            MessageBox.Show("Категория удалена");
            this.Close();
        }
    }
Зачем вам string.format? sender тоже не нужен. Так как cmd string переводите в string. Пустите простой string с параметром.
Либо с формат:
C#
1
 cmd.CommandText = string.Format("DELETE FROM category_components "+"WHERE id_category={0}", c);
Я так думаю что имя комбобокса известно , ибо WinWorms:
C#
1
2
3
 var cmd = connect.CreateCommand();
cmd.CommandText = string.Format("DELETE FROM category_components "+"WHERE id_category={0}", ComboBox1.SelectedIndex.ToString(););
                cmd.ExecuteNonQuery();
С параметром:
C#
1
2
3
4
5
6
7
8
9
10
11
12
var cmd = connect.CreateCommand();
cmd.CommandText = string.Format("DELETE FROM @otkudadel WHERE id_category=@idcat", 
    SqlParameter[] prms = new SqlParameter[2];
                    prms[0] = new SqlParameter("@idcat", SqlDbType.VarChar, 200);
                    prms[0].Value = ComboBox1.SelectedIndex.ToString();
                    prms[1] = new SqlParameter("@otkudadel", SqlDbType.VarChar, 200);
                    prms[1].Value = "category_components";
                   
 
 
                    cmd.Parameters.AddRange(prms);
                    conn.Open();
Добавлено через 6 минут
Но в любом случае , в твоем коде , ошибки типа присвоения "button" нет.
1
Жакуй
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 21
05.05.2013, 13:22  [ТС] 7
получилось сделать через параметры
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
08.05.2013, 15:21 8
1. Cоздайте в Category свойства по умолчанию:
C#
1
2
3
4
class Category
{
    public int ID {get;set;} //и так для каждого поля
}
в Load делаем так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 private void DelCategory_Load(object sender, EventArgs e)
        {            
            try
            {
               using(MySqlConnection connect = new MySqlConnection(Constants.DB))
              { 
                connect.Open();
                var cmd = connect.CreateCommand();
                cmd.CommandText = "SELECT * FROM category_components";
                var reader = cmd.ExecuteReader();
                List<Category> category_list = new List<Category>();
                while (reader.Read())
                {
                    var c = new Category();
                    c.FillFromReader(reader);
                    category_list.Add(c);                    
                } 
                comboBox1.ValueMember = "ID";
                comboBox1.DisplayMember = "Name"; //имя отображаемого столбца, точнее свойства в классе Category
                comboBox1.DataSource = category_list;
                reader.Close();
           }//using автоматически закроет подключение в случае ошибки
         } catch(Excaption ex){MessageBox.Show(ex.ToString());}  
            
        }
2. Можно не создавать класс, а использовать DataTable:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void DelCategory_Load(object sender, EventArgs e)
        {            
 
            try
            {
              using(MySqlConnection connect = new MySqlConnection(Constants.DB))
              { 
                //adapter автоматически открывает и закрывает подключение. Если было открыто, то сохраняет подключение открытым
                MySqlDataAdapter adapter = new MySqlDataAdapter( "SELECT * FROM category_components", connect);
                DataTable table = new DataTable();
                adapter.Fill(table);
                comboBox1.ValueMember = "ID";
                comboBox1.DisplayMember = "Name"; //имя отображаемого столбца
                comboBox1.DataSource = table;
              }//using автоматически закроет подключение в случае ошибки
            } catch(Excaption ex){MessageBox.Show(ex.ToString());}            
        }
3. теперь при удалении для получения ID выбранного значения достаточно написать combobox1.SelectedValue;


4. Однако это удалит данные только из БД, а в комбокобсе они сохранятся. для исправления положения можно или повторно загрузить данные из БД, или удалить выбранные данные с коллекции/таблицы.
1) для удаления со списка следует вынести объявление списка в поле класса. Затем выполнить следующее после удаления:
C#
1
2
3
4
category_list.RemoveAt(category_list.FindIndex(f => f.ID== (int)comboBox1.SelectedValue));
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Name"; //имя отображаемого столбца, точнее свойства в классе Category
comboBox1.DataSource = category_list;

2) для удаления из DataTable следует:
в Load после создания таблицы добавить:
C#
1
table.PrimaryKey = new DataColumn[1] { table.Columns["ID"] };
после удаления написать:
C#
1
2
DataTable table = comboBox1.DataSource as DataTable;
table.Rows.Remove(table.Rows.Find((int)comboBox1.SelectedValue));
0
08.05.2013, 15:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 15:21

Работа с Button
У меня есть 2 Button они должны выполнять один и тотже код. Button1 private...

Сохраняющее свойство button
Такая проблема, не могу понять, как сохранить изменения в базе после...

html element button
есть элемент кнопка &lt;input type=&quot;button&quot; value=&quot; Карта / Бой &quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru