DataGrid

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by F&D, 24 Aug 2010.

  1. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    Уважаемый, BrainDeaD!
    Есть код - парсинга ссылки в гриде и удаления строки из грида(из базы так и не могу сделать). Но, тут проблема.. когда нажимаю парсинг - выпадает окно(которое я сделал(Message) о запросе удаления строки, и при этом парсинг не происходит). Как можно исправить?
    Code:
    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:
                            {
                                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;
                            }
                    }
    
    И не могли бы Вы еще мне помочь в таком вопросе - правильно ли я понимаю данный код:
    Code:
    if (e.RowIndex != -1)
                {
    if (e.ColumnIndex == 3) dataGridView1.Rows.RemoveAt(e.RowIndex);
                                else if (e.ColumnIndex == 0)
                                {
    
    если индекс строки не равен -1
    тогда
    если индекс колонки равен 3 удаляем строку
    иначе если индекс колонки равен 0 что-то делаем..
     
  2. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    Всем доброго времени суток, еще раз!
    Есть такое событие:
    Code:
    private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                /*---Удаление из базы---*/
                //SqlConnection connection = new SqlConnection("server=ROOT-ПК\\SQLEXPRESS; database=edik; uid=sa; pwd=123321");
                SqlConnection cn = new SqlConnection(strConn);
                cn.Open();
    
                SqlCommand cmd = new SqlCommand("DELETE FROM edik_1");
                cmd.Connection = cn;
                DialogResult result = MessageBox.Show("Вы УВЕРЕНЫ, что хотите удалить всё содержимое базы?",
                            "Осторожно. Удаление всего содержимого базы.", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
    
                switch (result)
                {
                    case DialogResult.Yes:
                        {
                            cmd.ExecuteNonQuery();
                            cn.Close();
                            break;
                        }
    
                    case DialogResult.No:
                        {
                            return;
                        }
    
                }
                /*---Удаление содержимого всей таблицы---*/
                dataGridView1.Rows.Clear();
            }
    
    Данное событие удаляет из базы и очищает грид, по нажатию на хидер. Но тут есть проблема, а именно, всё это происходит по нажатию на любой хидер, а мне необходимо на конкретный, т.е. на один, последний в гриде. Как это можно прописать?
     
  3. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    Эту проблему я решил.

    Но появилась другая.
    У меня на компе стоит база MS SQL Server Managment Studio 2008. В ней я создал базу, в базе таблицу. И с ней работает моя прога. Но, если переношу базу на другой комп где стоит, к примеру, MS SQL Server Managment Studio 2008 R2, то база не аттачится. Выдает ошибку. Мне сказали, что так будет всегда при конфликте версии, патчей, обновлений. И что можно написать типа как скрипт или вроде того универсальный типа как..
    вот собственно и вопрос, как его написать?
     
  4. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    Про скрипты я нашел, вроде разобрался. Спасибо всем кто помогал.

    Читал тут
     
    #44 F&D, 7 Oct 2010
    Last edited: 7 Oct 2010
  5. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    И снова здравствуйте!(с)
    Опять необходима помощь, и опять по данной программе. Помощь в следующем:
    - Как можно организовать проверку на несуществующий фид?
    Чтобы программа не валилась каждый раз. Ну, что я имею ввиду, вводим мы допустим www.antichat.ru - это url, но не rss. И следовательно программа будет валится.
    - Как можно менять параметры подключения к базе, не перекомпилируя приложение? Может как нибудь используя файл конфигураций или что-то вроде этого?

    Нашел по 2-му пункту следующее, верно ли:
    Строку соединения с базой данных можно жестко прописать в исходном коде приложения, однако, это не самый лучший вариант, т.к. при изменении пути к базе данных, либо других параметров соединения придется вносить изменения в исходный код приложения и перекомпилировать его. В связи с этим, лучше всего использовать строку соединения, сохраненную в файле web.config.
    Code:
    <connectionStrings>
        <add name="FORTEST_ConnectionString" 
             connectionString="Provider= System.Data.SqlClient;Data 
                               Source=C:\FORTEST.mdb"/>	
    </connectionStrings>
    Впоследствии эту строку можно извлечь из файла web.config:
    Code:
    string strSqlConnection = WebConfigurationManager.ConnectionStrings 
     ["FORTEST_ConnectionString"].ConnectionString;

    Добавлено:
    Сделал так. В файле программы - app.config добавил код:
    Code:
    <appSettings>
    <add key="vasya" value="data source=.\SQLEXPRESS; initial catalog=vasya; UID=sa;PWD=123321"/>
    </appSettings>
    В файле dataAccess.cs добавил следующее:
    Code:
    using System.Configuration;
    и
    Code:
    string strConn = ConfigurationSettings.AppSettings["vasya"];
    Вроде работает, но то ли это?
     
    #45 F&D, 19 Oct 2010
    Last edited: 19 Oct 2010
  6. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    1.
    Code:
                XmlTextReader reader = new XmlTextReader("http://football.ua/rss2.ashx");
                try
                {
                    while (reader.Read())
                    {
                        switch (reader.Name)
                        {
                            case "title":
                                Console.WriteLine(reader.ReadString());
                                break;
                            case "link":
                                Console.WriteLine(reader.ReadString());
                                break;
                        }
                    }
                }
                catch (XmlException e)
                {
                    Console.WriteLine(e);
                }
    подставь другой урл и увидишь, что программа на валится. в блоке catch можешь обрабатывать ошибку как хочешь: выдавать на экран, писать в лог или вообще ничего не делать.

    2. всё правильно.
     
  7. F&D

    F&D Member

    Joined:
    6 Nov 2008
    Messages:
    341
    Likes Received:
    8
    Reputations:
    5
    1.
    А если использовать в парсере не конкретную ссылку, а как бы общий принцип. Ну, чтобы сразу не парсило и нормально запускалось. А то сейчас у меня стоит парсинг на первую строку таблицы, на нулевую или вторую - ошибка.
    Code:
    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
            {
                /*---Парсинг---*/
                news_dscpt_lb1.Items.Clear();
                XmlTextReader reader = new XmlTextReader(dataGridView1.CurrentRow.Cells[1].Value.ToString());
                try
                {
                    while (reader.Read())
                    {
                        switch (reader.Name)
                        {
                            case "title":
                                news_dscpt_lb1.Items.Add(reader.ReadString());
                                break;
                            case "link":
                                news_dscpt_lb1.Items.Add(reader.ReadString());
                                break;
                            case "pubDate":
                                news_dscpt_lb1.Items.Add(reader.ReadString());
                                news_dscpt_lb1.Items.Add("\n");
                                break;
                        }
                    }
                }
                catch (XmlException ex)
                {
                    DialogResult result = MessageBox.Show("Закрыть программу?!\n" + "\n 'OK' -- завершение приложения \n 'Cancel' -- продолжить работу",
                             "Отказ в доступе к указанному пути" , MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                    switch (result)
                    {
                        case DialogResult.OK:
                            {
                                Close();
                                break;
                            }
    
                        case DialogResult.Cancel:
                            {
                                return;
                            }
                    }
                }
            }
    
    Сейчас уже не выпадает Exception, если добавляю не существующий фид. просто ошибка, прога валится без выдачи
    Exception которую я прописал. Выпадает исключение, только если в базе одна эта ссылка - несуществующий фид.

    2. Спасибо.
     
    #47 F&D, 19 Oct 2010
    Last edited: 19 Oct 2010