С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
1

Перемещение строк из одного DataGridView в другой

06.06.2012, 16:52. Показов 4504. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ув. форумчане, помогите решить проблему с перемещением!!! Я в этом деле новичок, так что если будет чё не понятно спрашивайте!!!
Суть такова, у меня на форме 2 DataGridView с подключенными к базам данных сервера, 1-я база постоянно обновляется и добавляются в нее строки. Мне надо во вторую, перенести те строки которые добавились в первой через определенный момент времени!
Я поставил таймер, через каждых 10 сек у меня происходит сравнение 2-х переменных, которые вытягивают значение последнего айдишника 2-х бд, вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Timer1Tick(object sender, EventArgs e)
        {
            DataGridViewCell CellO = dataGridView1.Rows[dataGridView1.Rows.Count - 2].Cells["id"];
            int str = int.Parse(CellO.Value.ToString()); //Вытягиваем значени последнего id из Tpc2.prestar_values в переменную
            DataGridViewCell CellD= dataGridView2.Rows[dataGridView2.Rows.Count-2].Cells["id"];
            int str1 = int.Parse(CellD.Value.ToString()); //Вытягиваем значение последнего id Stable.prestar_values в переменную
            textBox1.Text=str.ToString(); 
            textBox2.Text=str1.ToString();
            
            bool result = textBox1.Text.Equals(textBox2.Text); //сранение id - шников двух баз
            if (result==true){
                MessageBox.Show("Stroki sovpadayut");
            }else{
                MessageBox.Show("Stroki ne sovpadayut");
            
            }
        }
Как сделать перемещение строк? Можно как-то с помощью SQL или Linq to sql?
Помогите кто чем может!!!

Добавлено через 16 минут
а вот еще метод подключения к базе
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public DataSet GetPvFromTpc() //метод подключения БД Tpc2.prestar_values
        {
            string connstr="server=192.168.105.203;user=tech1;database=stable;port=3306;password=Y-96mnrSw;Allow Zero Datetime=true";  //строка подключения
            string comand ="SELECT * FROM prestar_values;"; // командная строка
            MySqlConnection connect= new MySqlConnection(connstr); // создаем коннєкт
            MySqlDataAdapter adapter = new MySqlDataAdapter(comand,connect);                //выполняем команду и коннэктимся
            MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter);
            DataSet ds = new DataSet();
            DataTable Dtable = new DataTable();
            adapter.Fill(ds);
            connect.Close();
            return ds;
 
        }
Добавлено через 5 часов 41 минуту
от пишу так на таймер тике

C#
1
2
3
4
    for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
            dataGridView2.Rows.Add(dataGridView1.Rows[i]);
}
выводит ошибку:
Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2012, 16:52
Ответы с готовыми решениями:

Перенос данных из одного DataGridView в другой DatagridView
Доброго времени суток! Имеется DataGridView из которого нужно перенести информацию в другой...

Перемещение текста из одного RichEdit в другой
Здравствуйте! Подскажите в решении такой проблемы! Есть два RichEdit AcceptMessange =...

Перемещение содержимого одного контейнера в другой
Нужно переместить содержимое обьекта vector в обьект list. Подскажите пожалуйста!

Перемещение строки из одного DataTable в другой
Как можно переместить строку из одного DataTable в другой при условии их одинаковой структуры?...

10
1 / 1 / 0
Регистрация: 01.06.2012
Сообщений: 10
06.06.2012, 22:33 2
Наверно лучше оперировать данными не через DataGridView, а через их источники, в первом это будет DataSet с набором данных из БД, а второй DataTable, куда будут добавляться выбранные строки,

Вот ример функции создания DataTable и его привязка к DataGridView:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void CreateTable()
        {
            DataTable Таблица = new DataTable("FirstTb");
            DataColumn Колонка = null;
            Колонка = Таблица.Columns.Add("ID", System.Type.GetType("System.Int32"));
            Колонка = Таблица.Columns.Add("Name", System.Type.GetType("System.String"));
            Колонка = Таблица.Columns.Add("Sername", System.Type.GetType("System.String"));
 
            DataRow Строка = Таблица.NewRow();
            Строка["ID"] = 1;
            Строка["Name"] = "Василий";
            Строка["Sername"] = "Попович";
            Таблица.Rows.Add(Строка);
 
            Строка = Таблица.NewRow();
            Строка["ID"] = 2;
            Строка["Name"] = "Василий";
            Строка["Sername"] = "Попович";
            Таблица.Rows.Add(Строка);
 
            this.dataGridView1.DataSource = Таблица;
        }
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
07.06.2012, 09:09  [ТС] 3
а если я уже подключил базу к datagridView через строку подключения, можно как-то использовать dataTable для поиска недавно появившихся строк и задания SQL запроса в переменную, для того чтобы после проверки базы на новые строки(если они появились) выполнялся запрос???)
0
1 / 1 / 0
Регистрация: 01.06.2012
Сообщений: 10
07.06.2012, 09:33 4
Данные из базы хранятся в DataSet, который может быть источником для DataGridView, ведь второй элемент ттолько отображает ссылки.
DataSet это набор таблиц (DataTable), и для поиска можно использовать функцию поиска по первичному ключу:

C#
1
2
DataRow row = DataSetQuery.Tables["Users"].Rows.Find("1");
this.label1.Text = row["Id"].ToString();
К таблице можно обратиться как по имени (у меня "Users" либо по индексу)

К DataTable обращение осуществляется таким же способом, только не нужно использовать Tables[].
Да, кстати, этот метод подходит только в том случае если в таблице есть первичный ключ, в иных случаях можно использовать простой перебор в цикле.

А по поводу запроса, если исходить из Вашего кода, то запрос и так в переменной "comand"

C#
1
string comand ="SELECT * FROM prestar_values;"; // командная строка
В параметрах метода просто задавайте значение переменной.
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
07.06.2012, 09:54  [ТС] 5
так Белый_Волк а теперь можно поподробнее? Где создавать DataTable и как им пользоватся?

В параметрах метода просто задавайте значение переменной.

а можно нагляднее? Вот у меня 2 метода
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
public DataSet GetPvFromTpc() //метод подключения БД Tpc2.prestar_values
        {
            string connstr="server=192.168.105.203;user=tech1;database=stable;port=3306;password=Y-96mnrSw;Allow Zero Datetime=true";  //строка подключения
            string comand ="SELECT * FROM prestar_values;"; // командная строка
            MySqlConnection connect= new MySqlConnection(connstr); // создаем коннєкт
            MySqlDataAdapter adapter = new MySqlDataAdapter(comand,connect);                //выполняем команду и коннэктимся
            MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter);
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            connect.Close();
            return ds;
 
        }
        
        public DataSet GetPvFromStable()//метод подключения БД Stable.prestar_values
        {
        string connstr2="server=192.168.105.203;user=tech1;database=stable;port=3306;password=Y-96mnrSw;Allow Zero Datetime=true";  //строка подключения
        string comands2="SELECT * FROM prestar_values";
        MySqlConnection connect2 = new MySqlConnection(connstr2);
        DataSet ds2 = new DataSet();
        MySqlDataAdapter adapt = new MySqlDataAdapter(comands2,connect2);
        adapt.Fill(ds2);
        connect2.Close();
        return ds2;
        }
где нужно вписать dataTable , как и где задавать в параметрах метода значение переменной?
Мне нужно чтобы на событии timerTick обрабатывалось.

Пробовал писать
C#
1
DataRow row = DataSetQuery.Tables["Users"].Rows.Find("1");
C#
1
this.label1.Text = row["Id"].ToString();
но DataSetQuery в девелопере не находит, наверное перед этим надо что то написать?
0
1 / 1 / 0
Регистрация: 01.06.2012
Сообщений: 10
07.06.2012, 10:17 6
Судя по коментариям Вы подключаетесь к 2-м базам данных, а судя по коду к одной и тойже

Строка подключения:
server=192.168.105.203;user=tech1;database=stable;port=3306;password=Y-96mnrSw;Allow Zero Datetime=true

Это ошибка, или два метода друг друга дублируют?

Вот пример метода:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public DataSet GetPvFromTpc(string строка) //метод подключения БД Tpc2.prestar_values
        {
            string connstr="server=192.168.105.203;user=tech1;database=stable;port=3306;password=Y-96mnrSw;Allow Zero Datetime=true";  //строка подключения
            string comand = строка; // командная строка
            MySqlConnection connect= new MySqlConnection(connstr); // создаем коннєкт
            MySqlDataAdapter adapter = new MySqlDataAdapter(comand,connect);                //выполняем команду и коннэктимся
            MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter);
            DataSet ds = new DataSet();
            adapter.Fill(ds, "Values");
            connect.Close();
            return ds;
         }
 
private void timer1_Tick(object sender, EventArgs e)
        {
                // Выборка из БД по таймеру и запись в DataGridView1
                DataGridView1.DataSource = GetPvFromTpc("SELECT * FROM prestar_values");
                DataGridView1.DataMembers = "Values";
        }
DataSetQuery - это переменная типа DataSet. Название я придумал

C#
1
DataSet DataSetQuery = new DataSet();
А я правильно понял, через второй DataGridView Вы хотели обновлять БД?
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
07.06.2012, 11:02  [ТС] 7
Нет, я подключаюсь к разным базам в одном методе database=tpc2 а в другом database=stable

DataSetQuery это у меня ds)

а мож расписать public DataSet GetPvFromTpc(string строка) - я ввожу string comand(переменную) или
саму строку надо типа "SELECT * FROM prestar_values;"?

Добавлено через 13 минут
Сделал так public DataSet GetPvFromTpc(string comand = "SELECT * FROM prestar_values;" ) , все получилось спасибо!!!)))
Только теперь хотел узнать как мне запомнить в переменную последний айдишник, чтобы сравнивать с ним через время появились ли новые строки, если да то эти новые строки перекинуть в другую базу?

Добавлено через 2 минуты
А обновлять БД я хотел через первый DataGridView

Добавлено через 17 минут
Вот смотри я пишу
C#
1
2
dataGridView1.DataSource=GetPvFromTpc("INSERT INTO stable.prstar_values(*) SELECT * FROM tpc2.prestar_values WHERE id>890;");
                    dataGridView1.DataMember="Values";
мне выдает ошибку синтаксиса запроса! Запрос вроде правильный! И можно ли мне записать
WHERE id>890 в переменную чтобы постоянно сравнивать?
0
1 / 1 / 0
Регистрация: 01.06.2012
Сообщений: 10
07.06.2012, 11:04 8
C#
1
2
3
int ПоследнийЭлемент = DataSetQuery.Tables["Users"].Rows.Count - 1;
DataRow row = DataSetQuery.Tables["Users"].Rows[ПоследнийЭлемент];
this.label1.Text = row[0].ToString(); // 0 - это индекс столбца, обычно это ID
Это по поводу последнего элемента
1
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
07.06.2012, 11:11  [ТС] 9
Поменял немного запрос
C#
1
2
dataGridView1.DataSource=GetPvFromTpc("INSERT INTO stable.prstar_values SELECT * FROM tpc2.prestar_values WHERE id>890;");
                    dataGridView1.DataMember="Values";
теперь выдает ошибку Column count doesn't match value count at row 1 что не так?
0
1 / 1 / 0
Регистрация: 01.06.2012
Сообщений: 10
07.06.2012, 11:24 10
Цитата Сообщение от Mcr Посмотреть сообщение
Поменял немного запрос
C#
1
2
dataGridView1.DataSource=GetPvFromTpc("INSERT INTO stable.prstar_values SELECT * FROM tpc2.prestar_values WHERE id>890;");
                    dataGridView1.DataMember="Values";
теперь выдает ошибку Column count doesn't match value count at row 1 что не так?
Число столбцов не соответствует количеству значений в строке 1. Это на строке с запросом ошибка?
0
10 / 10 / 3
Регистрация: 30.01.2012
Сообщений: 366
07.06.2012, 11:44  [ТС] 11
Нет со строкой все в порядке, эта ошибка выводится при попытке инсерта!

Добавлено через 7 минут
По крайне мере не показывает что синтаксис неправильный) а при выполнении запроса как раз выдает эту ошибку
0
07.06.2012, 11:44
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2012, 11:44
Помогаю со студенческими работами здесь

Перемещение контрола из одного контейнера в другой
Добрый день! Подскажите пожалуйста, в чем может быть проблема... У меня есть отдельно...

Перемещение сточки из одного файла в другой
Доброго времени суток. Задача: Имеется файл log.txt с содержимым вида IP:порт, с произвольным...

Перемещение файла из одного каталога в другой
С одного каталога в другой при помощи бата как осуществить?

Перемещение пользователя с одного сервера на другой
Добрый день! Имеем сервер Release 6.0.1. Необходимо перенести всех пользователей на другой...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru