Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Быстрый Insert.


Автор: shark1 1.12.2008, 19:29
Здрасте всем.Такая задача.Есть таблица в Access,в ней есть колонка "StatusInfo",когда добовляю нового клиента в неё добовляется "New",затем когда вывожу информацию в datagridview,в обработчике dataGridView1_CellPainting вместо "New" подставляю картинку.Теперь например я закончил работать с клиентом(клиентами),как мне сделать так,например я выделил строчку или несколько строк в datagridview нажимаю на
radioButton(chengeStatus)и "New" в таблице поменялось на "Arch" .Спасибо.

Автор: shark1 1.12.2008, 22:42
Может я ошибся, когда я добовляю клиента то в поле "StatusInfo" добовляется "New",затем когда вывожу информацию в datagridview,в обработчике dataGridView1_CellPainting вместо "New" подставляю картинку.Может надо делать не Insert а Update,ведь у меня значение уже есть в базе("New"),мне его надо поменять на другое("Arch"),а потом при новом запросе соответственно и поменяется картинка.
Подскажите,ну неужели никто такое не делал ???.Спасибо.

Автор: shark1 2.12.2008, 00:57
вроде все заработало вот так:
Код

private void rb_Arch_Click(object sender, EventArgs e)
        {
            if (rb_Arch.Checked)
            {
                 UpdateQuery();
            }
        }
        private void UpdateQuery()
        {
            string query = "UPDATE [TBL_Clients] SET StatusInfo='Arch'  WHERE StatusInfo='New'";
                        bool fl = false;

            foreach (DataGridViewRow rw in dataGridView1.SelectedRows)
            {
                if (!fl)
                {
                    query += "IDClient = " + rw.Cells["IDClient"].Value.ToString();
                    fl = true;
                }
                else
                {
                    query += " OR IDClient = " + rw.Cells["IDClient"].Value.ToString();
                }
            }

            conn.Open();

            OleDbCommand cmd = new OleDbCommand();

            cmd = new OleDbCommand(query, conn);

            cmd.ExecuteNonQuery();

           
            conn.Close();

        }



только теперь оно меняет во всех строчках в кот.есть "New".А как сделать чтоб менял только в выбранных.
я знаю что нужно убрать вот это :StatusInfo='New'
но тогда выподает на ошибке
Syntax error in WHERE clause.
на этой строке:
cmd.ExecuteNonQuery();

Спасибо.

Автор: shark1 2.12.2008, 10:45
Ну где все,нужно чуть чуть подправить.Подскажите плиззз.Спасибо.

Автор: jonie 3.12.2008, 10:37
shark1 выведи запрос сам, который исполнять будешь, и посмотри какие ID у тебя будут там

Автор: shark1 3.12.2008, 13:09
Вот так:
Код

string query = "UPDATE [TBL_Clients] SET StatusInfo='Arch'";
            bool fl = false;

            foreach (DataGridViewRow rw in dataGridView1.SelectedRows)
            {
                if (!fl)
                {
                    
                    query += " WHERE IDClient = " + Convert.ToString(rw.Cells["IDClient"].Value);
                    fl = true;
                }
                else
                {
                    query += " OR IDClient = " + Convert.ToString(rw.Cells["IDClient"].Value);
                }
            }

            if (fl)
            {
                conn.Open();

                OleDbCommand cmd = new OleDbCommand();

                cmd = new OleDbCommand(query, conn);

                cmd.ExecuteNonQuery();

                conn.Close();
            }

 все заработало, у меня RowHeadersVisible был false,как только сделал truе все заработало,хоть так и не очень красиво выглядет(а может можно сделать и со скрытой колонкой?),но главное что зараотало.СПАСИБО.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)