Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2019, 05:01   #1
mkmen100500
 
Регистрация: 11.01.2019
Сообщений: 6
По умолчанию Как сохранить цвет выбранной строки после обновления данных из базы Mysql?

Здравствуйте, прошу вашей помощи. Есть такой код C#:
Код:
Dictionary<int, Color> colorsList = new Dictionary<int, Color>();
        private void toolStripButton5_Click(object sender, EventArgs e)//ИЗМЕНЕНИЕ ЦВЕТА СТРОКИ
        {

            for (int i = 0; i < listView1.Items.Count; i++)
            {
                if (listView1.Items[i].Selected == true)
                {
                    if (toolStripComboBox1.Text == "Красный")
                        

                    {

                        listView1.Items[i].BackColor = Color.Red;
                        if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Red); }
                        else { colorsList[i] = Color.Red; }
                    }

                    else if (toolStripComboBox1.Text == "Желтый")

                    {

                        listView1.Items[i].BackColor = Color.Yellow;
                        if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Yellow); }
                        else { colorsList[i] = Color.Yellow; }
                    }

                    else if (toolStripComboBox1.Text == "Зеленый")

                    {

                        listView1.Items[i].BackColor = Color.Green;
                        if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Green); }
                        else { colorsList[i] = Color.Green; }

                    }

                    else if (toolStripComboBox1.Text == "Без цвета")

                    {

                        listView1.Items[i].BackColor = Color.White;
                        if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.White); }
                        else { colorsList[i] = Color.White; }
                    }
                }
            }
        }

        void SetColor()
        {

            foreach (var c in colorsList)
            {
                if (listView1.Items.Count >= c.Key)
                    listView1.Items[c.Key].BackColor = c.Value;
            }
        }
Выбранная строка в listview цветом выделяется, но после обновления данных из mysql в форму происходит сброс цвета соответственно. Подскажите как заставить строки listview запомнить цвет?

Код обновления просто по кнопке:

Код:
private async void toolStripButton4_Click(object sender, EventArgs e)//ОБНОВЛЕНИЕ ДАННЫХ
        {
            listView1.Items.Clear();
            await LoadBanksAsync();
        }
я понимаю что listView1.Items.Clear(); сбрасывает все с listview, но без нее начинается дублирование данных. Как сохранить цвет? Подмогите пожалста.
mkmen100500 вне форума Ответить с цитированием
Старый 15.01.2019, 09:33   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

ПЕРЕД обновлением запомнить где-то
ПОСЛЕ восстановить из ЗАПОМНЕННОГО
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 15.01.2019, 09:51   #3
mkmen100500
 
Регистрация: 11.01.2019
Сообщений: 6
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
ПЕРЕД обновлением запомнить где-то
ПОСЛЕ восстановить из ЗАПОМНЕННОГО
Ну это логично, вы правы.
mkmen100500 вне форума Ответить с цитированием
Старый 17.01.2019, 12:18   #4
mkmen100500
 
Регистрация: 11.01.2019
Сообщений: 6
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
ПЕРЕД обновлением запомнить где-то
ПОСЛЕ восстановить из ЗАПОМНЕННОГО
Разобрался с этим делом, поместив SetColor() в обновление данных из MySQL.

Но при закрытии и новом открытии цвета сбрасываются и если строка закрашивается, и после этого добавить новую строку, то выводит Исключение типа "System.ArgumentOutOfRangeException " возникло в mscorlib.dll, но не было обработано в коде пользователя

Дополнительные сведения: InvalidArgument=Значение '0' недопустимо для 'index'.

Еще посмотрел что если в таблице более одной строки и все их окрасить, обновить то выбивает ту же ошибку. Решено только для одной строки в общем.
Прошу помощи, дорогие друзья!
mkmen100500 вне форума Ответить с цитированием
Старый 05.02.2019, 07:16   #5
mkmen100500
 
Регистрация: 11.01.2019
Сообщений: 6
По умолчанию

в продолжении своей темы, отказался полностью от listview. Перешел на datagridview. Теперь с цветом делаю так:
Код:
        public async void toolStripButton5_Click(object sender, EventArgs e)//ИЗМЕНЕНИЕ ЦВЕТА СТРОКИ
        {
            MySqlCommand colorred = new MySqlCommand("UPDATE banks SET color_id = 1 WHERE Id=@Id", MySqlConnection);
            colorred.Parameters.AddWithValue("Id", Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value));

                if (dataGridView1.SelectedRows.Count > 0 && toolStripComboBox1.Text == "Красный")
                {
                    await colorred.ExecuteNonQueryAsync();
                }
Т.е. есть ComboBox, в нем есть выбор цветов. Для начала я хочу сделать чтобы, при условии, что в datagrid выбрана строка и в комбобоксе выбран красный цвет, в таблице banks в выбранную запись записывалось в color_id цифра 1. в дальнейшем присвоить каждой цифре цвет строки. Но вот пока не записывает цифру в базу MySQL ((((
mkmen100500 вне форума Ответить с цитированием
Старый 07.02.2019, 13:01   #6
mkmen100500
 
Регистрация: 11.01.2019
Сообщений: 6
По умолчанию

еще раз здравствуйте, я тут все свою тему продолжаю и сталкиваюсь с новыми проблемами (чисто для меня):

В базе MySQL я создал столбец color_id. При полном выделении строки в datagridview и выбором цвета из combobox строка окрашивается в нужный цвет и в столбец color_id записывается цифра 1-красный, 2 - зеленый и тд. Но, соответственно, при обновлениии или при новом открытии формы цвета все еще скидываются, значит в загрузку формы и при обновлении нужно вызывать метод который будет обрабатывать столбец color_id и в соответствии с цифрой будет окрашивать строку.

Код:
 public async Task SaveColor()
        {
            System.Data.Common.DbDataReader sqlRead = null;

            string c = "3";


            MySqlCommand sqlCom = new MySqlCommand("SELECT * FROM banks", MySqlConnection);

            sqlRead = await sqlCom.ExecuteReaderAsync();


            try
            {
                while (await sqlRead.ReadAsync())
                {
                    string i = sqlRead["color_id"].ToString();
                    for (int z = 0; z < dataGridView1.Rows.Count; z++)
                    {
                        if (i == c)
                        {

                            dataGridView1.Rows[z].DefaultCellStyle.BackColor = Color.Green;
                        }
                    }
Это пример для одного цвета, но когда i==c начинается окрашивание всех строк, а не именно той у которой color_id = 3. Я это прекрасно понимаю. Но не могу допетрить как сделать так, чтобы окрашивалась именно та строка у которой color_id = 3. Столбец color_id я в datagrid не вывожу соответственно.
mkmen100500 вне форума Ответить с цитированием
Старый 12.02.2019, 06:50   #7
mkmen100500
 
Регистрация: 11.01.2019
Сообщений: 6
По умолчанию

Вопрос решил так:
Код:
       private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            DataGridView grid = sender as DataGridView;
            if (grid != null)
            {
                if (e.RowIndex > -1 && e.RowIndex < dataGridView1.RowCount - 1)
                {
                    if (dataGridView1[10, e.RowIndex].Value.ToString() == "0")
                        grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;

                    else if (dataGridView1[10, e.RowIndex].Value.ToString() == "1")
                        grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;

                    else if (dataGridView1[10, e.RowIndex].Value.ToString() == "2")
                        grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;

                    else if (dataGridView1[10, e.RowIndex].Value.ToString() == "3")
                        grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Green;
                }
            }
        }
mkmen100500 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список. Как изменить цвет заливки выбранной строки? klim8 Microsoft Office Access 2 20.03.2018 23:26
После обновления вордпресс, обновления плагина woocommerce, после оформления заказов не показывает количество купленных товаров Алекс Мельников WordPress и другие CMS 4 24.07.2016 02:28
DLE. Проблема после обновления с 9.5 на 9.6. MySQL Error elagin WordPress и другие CMS 2 19.09.2012 11:57
Как после обновления страницы сохранить данные в инпуте? byMary93 JavaScript, Ajax 1 01.08.2012 11:46
Странное поведение PHP с MySQL..запись в базе дублируется после обновления страницы Vervolf PHP 30 30.07.2011 02:10