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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2010, 12:34   #1
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
Восклицание DataGrid и парсинг..

Всем здрасте!
Есть код - парсинга ссылки в гриде и удаления строки из грида(из базы так и не могу сделать). Но, тут проблема.. когда нажимаю парсинг - выпадает окно(которое я сделал(Message) о запросе удаления строки, и при этом парсинг не происходит). Как можно исправить?

Код:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            /*---Удаление строки---*/

            if (e.RowIndex != -1)
            {
                DialogResult result = MessageBox.Show("Вы УВЕРЕНЫ, что хотите удалить строку из таблицы?",
                        "Осторожно. Удаление строки из таблицы", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                switch (result)
                {
                    case DialogResult.Yes:
                        {
                            SqlConnection connection = new SqlConnection("server=ROOT-ПК\\SQLEXPRESS; database=edik; uid=sa; pwd=123321");
                            connection.Open();
                            SqlCommand cmdDel = new SqlCommand("DELETE FROM edik_1 WHERE FeedID = @FeedID", connection);
                            SqlParameter param = new SqlParameter();
                            param.DbType = DbType.Int32;
                            param.ParameterName = "@FeedID";
                            // MessageBox.Show(dataGridView1.CurrentRow.Cells[0].Value.ToString());

                            //0 - это первая ячейка в текущей строке грида

                            param.Value = dataGridView1.CurrentRow.Cells[0].Value;
                            cmdDel.Parameters.Add(param);
                            byte count = 0;

                            try
                            {
                                count = (byte)cmdDel.ExecuteNonQuery();
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.ToString());
                            }
                            finally
                            {
                                if ((connection != null))
                                {
                                    connection.Close();
                                }
                            }

                            if (count > 0)
                            {
                                dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
                            }
                            
                            if (e.ColumnIndex == 3) dataGridView1.Rows.RemoveAt(e.RowIndex);
                            else if (e.ColumnIndex == 0)
                            {
                                /*---Парсинг---*/
                                XmlTextReader reader = new XmlTextReader((sender as DataGridView)[e.ColumnIndex, e.RowIndex].Value.ToString());
                                while (reader.Read())
                                {
                                    switch (reader.Name)
                                    {
                                        case "title":
                                            listBox1.Items.Add(reader.ReadString());
                                            break;
                                        case "link":
                                            listBox1.Items.Add(reader.ReadString());
                                            break;
                                        case "pubDate":
                                            listBox1.Items.Add(reader.ReadString());
                                            listBox1.Items.Add("\n");
                                            break;
                                    }
                                } 
            
                            }
                            break;
                        }

                    case DialogResult.No:
                        {
                            return;
                        }
                }
               
             }
        }
Должно быть так:

Раньше работало, до добавление неких фич(которые тоже нужны).

А теперь, вот так:
"Одни наслаждаются дождём, другие просто промокают." - Роджер Миллер
LT. вне форума Ответить с цитированием
Старый 22.09.2010, 18:22   #2
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
По умолчанию

Проблема решена.
"Одни наслаждаются дождём, другие просто промокают." - Роджер Миллер
LT. вне форума Ответить с цитированием
Старый 22.09.2010, 18:25   #3
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Рассказал бы как решил....
dampirik вне форума Ответить с цитированием
Старый 22.09.2010, 18:31   #4
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
Рассказал бы как решил....
лучше бы помогли раньше
Сейчас ухожу, через два часа отредактирую это сообщение с рабочим вариантом.

В общем, как и обещал. Правильный вариант(что изменить выделено цветом):
Код:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            /*---Удаление строки---*/
            if (e.RowIndex != -1)
            {
                if (e.ColumnIndex == 3)
                {
                    DialogResult result = MessageBox.Show("Вы УВЕРЕНЫ, что хотите удалить строку из таблицы?",
                            "Осторожно. Удаление строки из таблицы", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    switch (result)
                    {
                        case DialogResult.Yes:
                            {
                                SqlConnection connection = new SqlConnection("server=ROOT-ПК\\SQLEXPRESS; database=edik; uid=sa; pwd=123321");
                                connection.Open();
                                SqlCommand cmdDel = new SqlCommand("DELETE FROM edik_1 WHERE FeedID = @FeedID", connection);
                                SqlParameter param = new SqlParameter();
                                param.DbType = DbType.Int32;
                                param.ParameterName = "@FeedID";
                                // MessageBox.Show(dataGridView1.CurrentRow.Cells[0].Value.ToString());
                                //0 - это первая ячейка в текущей строке грида
                                param.Value = dataGridView1.CurrentRow.Cells[0].Value;
                                cmdDel.Parameters.Add(param);
                                byte count = 0;
                                try
                                {
                                    count = (byte)cmdDel.ExecuteNonQuery();
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.ToString());
                                }
                                finally
                                {
                                    if ((connection != null))
                                    {
                                        connection.Close();
                                    }
                                }
                                if (count > 0)
                                {
                                    dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
                                }

                            }
                            break;


                        case DialogResult.No:
                            {
                                return;
                            }
                    }
                }
            }
        }

....

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            /*---Парсинг---*/
            XmlTextReader reader = new XmlTextReader(dataGridView1.CurrentRow.Cells[1].Value.ToString());
            while (reader.Read())
            {
                switch (reader.Name)
                {
                    case "title":
                        listBox1.Items.Add(reader.ReadString());
                        break;
                    case "link":
                        listBox1.Items.Add(reader.ReadString());
                        break;
                    case "pubDate":
                        listBox1.Items.Add(reader.ReadString());
                        listBox1.Items.Add("\n");
                        break;
                }
            }
        }
Как видим, для облегчения(хотя кому как) программы, было добавлено еще одно событие SelectionChanged. Соотвественно код парсинга, был убран из первого события, вместе с строкой кода:
Код:
dataGridView1.Rows.RemoveAt(e.RowIndex);
else if (e.ColumnIndex == 0)
Вместо этого в первое событие, была добавлена(подредактирована) строка выделенная цветом.

"Одни наслаждаются дождём, другие просто промокают." - Роджер Миллер

Последний раз редактировалось LT.; 22.09.2010 в 19:43.
LT. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DataGrid C# Dizell Общие вопросы .NET 2 22.07.2010 16:59
keypress datagrid tigrend Общие вопросы .NET 0 11.05.2010 08:27
обновление DataGrid balamut Общие вопросы .NET 0 29.03.2010 22:55