Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/48: Рейтинг темы: голосов - 48, средняя оценка - 4.56
 Аватар для MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50

Копирование строк из DataGridView

27.11.2011, 10:21. Показов 10459. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возникла проблема с копированием строк целиком из одной dataGridView в другую.
Пока сделал поячеечное копирование информации, но оптимизация требует сделать попроще, как-нибудь вот так:
C++
1
dataGridView3->Rows->Add(dataGridView1->Rows[i]);
Но студия ругается на то, что эта строка уже принадлежит другой таблице.
Порылся - нашёл функцию Clone(), но она возвращает System::Object^, решил попробовать сделать так:
C++
1
dataGridView3->Rows->Add((System::Windows::Forms::DataGridViewRow^)dataGridView1->Rows[i]->Clone());
На что студия ответила заполнением таблицы пустыми строками, хотя и в нужном количестве...
Что я делаю не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2011, 10:21
Ответы с готовыми решениями:

Копирование строк DataGridView
Добрый день! Есть DataGridView, в нее загружаются данные из БД, при необходимости пользователь может добавить новую строку. Как сделать...

Копирование столбца из DataGridView. Копирование ячейки из ДатаГридВью
Доброго времени суток! Что то читал читал форумы и гугл - а так и не нашел для себя решения. Смотрю в книгу, вижу... в общем ситуация...

Копирование DataGridView в другой DataGridView
Всем привет. столкнулся с проблемой: имеется один DataGridView,я его заполняю вручную, нажимаю кнопку и в этой же форме,только в другом...

35
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
31.12.2019, 14:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Ivan_CS Посмотреть сообщение
Подключаюсь через DataAdapter к SQLite БД и отображаю БД в DataGridView. В DataGridView редактирую (удаляю, добавляю, меняю) потом Update в БД. Все работает кроме копирования ))
Я не про то. Вы создаете таблицу, датасет и адаптер:
C#
1
2
3
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        SQLiteDataAdapter da = new SQLiteDataAdapter(sql, conn);
Но таблицу dt в датасет не добавляете, по крайней мере я этого не увидел. По идее должно быть:
C#
1
2
3
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
31.12.2019, 15:11
РЕШЕНО!!

Добавлено через 2 минуты
Цитата Сообщение от serg4242 Посмотреть сообщение
Я не про то.
da.Fill(dt); НАДО СТАВИТЬ НЕ В МЕТОДЕ копировать (КАЖДЫЙ РАЗ), а при соединении с БД единожды.
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,870
31.12.2019, 16:46
Цитата Сообщение от serg4242 Посмотреть сообщение
Я, если честно, не понимаю, как у Вас вообще работает
Обычно, это и называется источник данных/
Цитата Сообщение от serg4242 Посмотреть сообщение
Таблицу dt Вы в датасет не добавляете, имена полей не описаны
Причем тут DataSet и название столбцов - у вас есть понятие для чего он вообще нужен? Тип DataSet представляет собой контейнер для любого количества объектов DataTable

Цитата Сообщение от serg4242 Посмотреть сообщение
DataView и гриде (например при нажатии на имя столбца они будут отсортированы)
Я вам это и показал. Хорошо выполните два действия

1)Загрузите данные в источник dataTable и затем отобразите в dgv
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
DataTable dt = new DataTable();
private void Form2_Load(object sender, EventArgs e)
{
            dt.Columns.Add("Col1");
            dt.Columns.Add("Col2");
            dt.Columns.Add("Col3");
            dt.Columns.Add("Col4");
 
            dt.Rows.Add("Value1","Value2", "Value3", "Value4");
            dt.Rows.Add("Value5", "Value6", "Value7", "Value8");
            dt.Rows.Add("Value9", "Value10", "Value11", "Value12");
            dataGridView1.DataSource = dt;
}
2)Нажмите 3 строку в dgv, затем на столбец и отсортируйте. Запомните Запоминаем что индекс был - 2
3)создайте обработчик - например кнопки и посмотрите, какой индекс будет у отсортированной строки.
C#
1
2
3
4
5
6
7
8
private void button1_Click(object sender, EventArgs e)
{
           DataRow[] result = dt.Select("Col3 = 'Value11'");
            if (result.Length > 0)
            {
                int SelectedIndex = dt.Rows.IndexOf(result[0]);
            }
}
serg4242, Не вводите людей в заблуждение. Все что вы мне ответили выше это не верная информация.

Теперь пол делу.
Цитата Сообщение от Ivan_CS Посмотреть сообщение
В DataGridView редактирую (удаляю, добавляю, меняю)
Ну так зачем вам тогда копировать данные из dt в dt.
Создайте команду
SQL
1
INSERT INTO ....
и добавьте это строку в бд.
0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
31.12.2019, 17:11
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Ну так зачем вам тогда копировать данные из dt в dt.
Чтобы можно было сохранять БД по нажатию кнопки сохранить, а не копировать строку.
Сейчас вроде как проблему с копированием частично решил с вашей помощью, ДатаСет вообще выкинул.
Сейчас не сохраняется скопированная строка в БД... перепробывал ряд советов из иНЕТА
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
using System.Collections;
using System.Text.RegularExpressions;
 
namespace справочник3
{
    public partial class TB : Form
    {
        public TB()
        {
            InitializeComponent();
            LoadData();
        }
 
        static SQLiteConnection conn = new SQLiteConnection("Data Source = list3.db; Version = 3");
        DataTable dt = new DataTable();
        static string sql = "SELECT * FROM staff";
        SQLiteDataAdapter da = new SQLiteDataAdapter(sql, conn);
        bool flag = true;
 
        private void LoadData()
        {
            conn.Open();
            da.Fill(dt);
            dataGridView1.DataSource = dt.DefaultView;
            dataGridView1.Columns[7].ReadOnly = true;
        }
 
        private void TB_FormClosed(object sender, FormClosedEventArgs e)
        {
            conn.Close();
            Application.Exit();
        }
 
        private void СохранитьToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            dataGridView1.CurrentCell = null;
            try
            {
                if (flag == true)
                {
                    SQLiteCommandBuilder cb = new SQLiteCommandBuilder(da);
                    cb.GetUpdateCommand();
                    da.Update(dt);
                    MessageBox.Show(
                    "База данных успешно сохранена!",
                    "Сообщение",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information,
                    MessageBoxDefaultButton.Button1);
                }
                else
                {
                    MessageBox.Show(
                   "Данные заполнены не верно, пожалуйста заполните корректно все данные!",
                   "Сообщение",
                   MessageBoxButtons.OK,
                   MessageBoxIcon.Error,
                   MessageBoxDefaultButton.Button1);
                }
            }
            catch
            {
                MessageBox.Show(
                "Данные заполнены не верно, пожалуйста заполните корректно все данные!",
                "Сообщение",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error,
                MessageBoxDefaultButton.Button1);
            }
        }
 
        private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].HeaderText == "ФИО человека")
            {
                Regex regex = new Regex(@"^[А-ЯЁ][а-яё\-]+\s([А-ЯЁ][а-яё\-]+)(\.|\s)\s*([А-ЯЁ][а-яё\-\.]+)$");
                if (regex.IsMatch(Convert.ToString(dataGridView1.CurrentCell.Value)))
                {
                    flag = true;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.White;
                }
                else
                {
                    flag = false;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.FromArgb(238, 180, 189);
                }
            }
            else if (dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].HeaderText == "дата рождения")
            {
                Regex regex = new Regex(@"(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d");
                if (regex.IsMatch(Convert.ToString(dataGridView1.CurrentCell.Value)))
                {
                    flag = true;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.White;
                }
                else
                {
                    flag = false;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.FromArgb(238, 180, 189);
                }
            }
            else if (dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].HeaderText == "должность")
            {
                Regex regex = new Regex(@"^[А-ЯA-Z].{2,45}$");
                if (regex.IsMatch(Convert.ToString(dataGridView1.CurrentCell.Value)))
                {
                    flag = true;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.White;
                }
                else
                {
                    flag = false;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.FromArgb(238, 180, 189);
                }
            }
            else if (dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].HeaderText == "телефон")
            {
                Regex regex = new Regex(@"^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$");
                if (regex.IsMatch(Convert.ToString(dataGridView1.CurrentCell.Value)))
                {
                    flag = true;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.White;
                }
                else
                {
                    flag = false;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.FromArgb(238, 180, 189);
                }
            }
            else if (dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].HeaderText == "руководитель")
            {
                Regex regex = new Regex(@"^[А-ЯЁ][а-яё\-]+\s([А-ЯЁ][а-яё\-]+)(\.|\s)\s*([А-ЯЁ][а-яё\-\.]+)$");
                if (regex.IsMatch(Convert.ToString(dataGridView1.CurrentCell.Value)))
                {
                    flag = true;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.White;
                }
                else
                {
                    flag = false;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.FromArgb(238, 180, 189);
                }
            }
            else if (dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].HeaderText == "отдел")
            {
                Regex regex = new Regex(@"^[А-ЯA-Z].{2,45}$");
                if (regex.IsMatch(Convert.ToString(dataGridView1.CurrentCell.Value)))
                {
                    flag = true;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.White;
                }
                else
                {
                    flag = false;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.FromArgb(238, 180, 189);
                }
            }
            else if (dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].HeaderText == "почтовый адрес")
            {
                Regex regex = new Regex(@"^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$");
                if (regex.IsMatch(Convert.ToString(dataGridView1.CurrentCell.Value)))
                {
                    flag = true;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.White;
                }
                else
                {
                    flag = false;
                    dataGridView1.CurrentCell.Style.BackColor = System.Drawing.Color.FromArgb(238, 180, 189);
                }
            }
            dataGridView1[7, dataGridView1.CurrentRow.Index].Value = Convert.ToString(DateTime.Now);
        }
 
        private void УдалитьСтрокуToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
        }
 
        private void КопироватьСтрокуToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            dt.ImportRow(dt.Rows[dataGridView1.CurrentRow.Index]);
        }
    }
}
Т.е. фактически индекса скопированной строки нет, но она появляется в datagridview
0
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
31.12.2019, 18:34
Цитата Сообщение от Kazbek17 Посмотреть сообщение
создайте обработчик - например кнопки и посмотрите, какой индекс будет у отсортированной строки.
А теперь посмотрите на код по поводу которого я сделал замечание:
C#
1
dt.Rows[dataGridView1.CurrentRow.Index]
Вот тестовый пример, какие при таком коде будут данные:
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
26
      DataTable dt;
        public Form1()
        {
            InitializeComponent();
            dt = new DataTable();
            dt.Columns.Add("name", typeof(string));
            dt.Rows.Add("name1");
            dt.Rows.Add("name2");
            dt.Rows.Add("name3");
            dataGridView1.DataSource = dt.DefaultView;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            int index = 0;
            DataRow row = ((DataRowView)dataGridView1.Rows[index].DataBoundItem).Row;
            MessageBox.Show($"Индекс в таблице: {dt.Rows.IndexOf(row)}. Индекс в гриде: {index}");
            ((DataView)dataGridView1.DataSource).Sort = "name desc";
            row = ((DataRowView)dataGridView1.Rows[index].DataBoundItem).Row;
            MessageBox.Show($"Индекс в таблице: {dt.Rows.IndexOf(row)}. Индекс в гриде: {index}");
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(dt.Rows[dataGridView1.CurrentRow.Index]["name"].ToString());
        }
По поводу остального не хочу комментировать, Вы начальник, я дурак.
0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
31.12.2019, 18:41
Цитата Сообщение от serg4242 Посмотреть сообщение
Вот тестовый пример
мне помогите плиз. Как сделать чтобы скопированная строка сохранялась?
Пробовал так
C#
1
2
3
dt.Rows(dt.Rows[dataGridView1.CurrentRow.Index]);
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = dt;
индекс появился, в скопированной строке можно менять данные - сохраниться в оригинале, но после сохранения и перезапуска программы копии строк нет, только оригиналы.

Добавлено через 2 минуты
ой вот тоесть
C#
1
2
3
4
5
6
private void КопироватьСтрокуToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            dt.ImportRow(dt.Rows[dataGridView1.CurrentRow.Index]);
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = dt;
        }
0
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
31.12.2019, 19:15
Попробуйте так:
C#
1
2
3
da.UpdateCommand = cb.GetUpdateCommand();
da.InsertCommand= cb.GetInsertCommand();
da.DeleteCommand = cb.GetDeleteCommand();
И проверьте правильные ли запросы SQLiteCommandBuilder создает.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
31.12.2019, 19:26
Цитата Сообщение от Ivan_CS Посмотреть сообщение
Как сделать чтобы скопированная строка сохранялась?
Нельзя так делать, т.к. ваша таблица перестанет быть даже в 1-й нормальной форме. Читайте теорию по реляционным БД.
0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
31.12.2019, 19:27
Цитата Сообщение от serg4242 Посмотреть сообщение
И проверьте правильные ли запросы SQLiteCommandBuilder создает.
Не помогло. Как можно проверить запросы?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try
            {
                if (flag == true)
                {
                    SQLiteCommandBuilder cb = new SQLiteCommandBuilder(da);
                    da.UpdateCommand = cb.GetUpdateCommand();
                    da.InsertCommand = cb.GetInsertCommand();
                    da.DeleteCommand = cb.GetDeleteCommand();
                    da.Update(dt);
                    MessageBox.Show(
                    "База данных успешно сохранена!",
                    "Сообщение",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information,
                    MessageBoxDefaultButton.Button1);
                }
Добавлено через 1 минуту
Цитата Сообщение от Igr_ok Посмотреть сообщение
Нельзя так делать
как именно? Сохранять скопированную строку нельзя?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
31.12.2019, 19:47
Ivan_CS, можете почитать теорию https://metanit.com/sql/tutorial/2.1.php
или принять на веру: копирование строки в ту же таблицу не имеет смысла.
Цитата:
Первая нормальная форма (1NF) предполагает, что сохраняемые данные на пересечении строк и столбцов должны представлять скалярное значение, а таблицы не должны содержать повторяющихся строк.
0
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
31.12.2019, 23:27
Цитата Сообщение от Ivan_CS Посмотреть сообщение
Не помогло. Как можно проверить запросы?
C#
1
2
3
MessageBox.Show(da.UpdateCommand.CommandText);
MessageBox.Show(da.InsertCommand.CommandText);
MessageBox.Show(da.DeleteCommand.CommandText);
Цитата Сообщение от Ivan_CS Посмотреть сообщение
Сохранять скопированную строку нельзя?
Можно, запросы выполняться будут. Это, скажем так, не техническая, а концептуальная проблема. При удалении или изменении, например, будет изменяться не только строка, которую вы выбрали, но и все идентичные.
0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
01.01.2020, 12:10
С Новым 2020 Годом Уважаемые Коллеги!
Igr_ok, спасибо за учебный материал, суть понял, но тонкости не усвоил. Понял что таблица не проходит первую нормальную форму. Теперь думаю как это обхитрить.
Весь смысл этой затеи в том, что в справочнике имеется 8 столбцов и пользователю требуется добавить строку идентичную какой либо, с лишь небольшими изменениями. По умолчанию в datagridview пользователь может скопировать выделенную строку целиком (Ctr+C), но вставить (Ctrl + V) целиком не может, лишь только копировать и вставлять каждую ячейку отдельно. А если столбцов много? А скорректировать требуется только 1?
Вот для этой цели мне и нужно реализовать кнопку "скопировать строку".
Как обхитрить исключение System.ArgumentException: "Эта строка уже принадлежит данной таблице."
C#
1
2
3
4
        private void КопироватьСтрокуToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            dt.Rows.Add(dt.Rows[dataGridView1.CurrentRow.Index]);
        }
Может перебором ячеек строки можно? Добавляя рандомный символ для уникальности или как то другим способом?

Добавлено через 4 минуты
Насколько я понимаю нужно как то присвоить уникальность каждой скопированной строке для выполнения этой задачи
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
01.01.2020, 12:57
Цитата Сообщение от Ivan_CS Посмотреть сообщение
Весь смысл этой затеи в том, что в справочнике имеется 8 столбцов и пользователю требуется добавить строку идентичную какой либо, с лишь небольшими изменениями.
Во-первых, вы сразу после копирования сохраняете скопированную запись, если бы она перед этим редактировалась пользователем, проблем бы не было. Во-вторых, для справочника сотрудников копирование-сомнительная экономия времени. Пусть пользователь заполняет все поля. При скопированной записи он рано или поздно обязательно забудет изменить какое-то поле. Законы Мерфи особенно хорошо работают в программировании)
0
1 / 1 / 0
Регистрация: 22.07.2019
Сообщений: 39
01.01.2020, 14:10
C#
1
2
3
4
5
6
7
8
9
        private void КопироватьСтрокуToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            Random rand = new Random();
            char a = (char)rand.Next(0x0430, 0x44F);
            MessageBox.Show(Convert.ToString(a));
            DataRow copyrow = dt.Rows[dataGridView1.CurrentRow.Index];
            copyrow[0] += Convert.ToString(a);
            dt.Rows.Add(copyrow);
        }
Вот, как бы перед добавлением в таблицу добавил строке уникальности, но исключение опять то же System.ArgumentException: "Эта строка уже принадлежит данной таблице."
Закрадывается мысль что в строках datatable содержиться какой то уникальный ключ который дублируется.
Что надо изменить то, чтобы строка "прижилась".

Добавлено через 6 минут
Как он понимает что строка уже принадлежит этой таблице? - это ключ к ответу.
Уникальность значений ячеек строки не помогает почему то...
Может перед добавлением строки в таблицу нужно что то обновить, сбросить?

Добавлено через 5 минут
Ясно. Никакой уникальности нет. Изменения дублируются. Нужно в начале как то отвязать изменяемую строку (в которую добавляю уникальность(символ)) от таблицы. Как?

Добавлено через 54 минуты
УРА!!! РЕШЕНО!!! Все как надо теперь отрабатывает. Все элементарно... О великий c#!!!
Держите:
C#
1
2
3
4
5
        private void КопироватьСтрокуToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            object[] copyrow = dt.Rows[dataGridView1.CurrentRow.Index].ItemArray;
            dt.Rows.Add(copyrow);
        }
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
01.01.2020, 16:50
Цитата Сообщение от Ivan_CS Посмотреть сообщение
Как он понимает что строка уже принадлежит этой таблице? - это ключ к ответу.
Цитата Сообщение от Ivan_CS Посмотреть сообщение
DataRow copyrow = dt.Rows[dataGridView1.CurrentRow.Index];
copyrow- это ссылка на объект(строку) в dt. И когда вы эту же строку пытаетесь еще раз добавить в таблицу(DataTable), получаете ошибку.
Цитата Сообщение от Ivan_CS Посмотреть сообщение
УРА!!! РЕШЕНО!!! Все как надо теперь отрабатывает. Все элементарно
Ага...вы обошли "защиту от дурака".
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
02.01.2020, 01:30
MYriad, Вы получили неправильный ответ. Копируются элементарно все данные грида1 на грид2.
Установите 2 одинаковых грида. Кнопка1 - заполнение грида1 случайными целыми числами. Кнопка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
26
27
28
29
30
31
32
33
34
35
36
37
38
Forms Code
{  
        private void button1_Click(object sender, EventArgs e)
        {
           dataGridView1.RowCount = 4;
            dataGridView1.ColumnCount = 6;
            dataGridView2.RowCount = 4;
            dataGridView2.ColumnCount = 6;
          
             Random rnd = new Random();
 
             for (int i = 0; i < 4; i++)
             {
                 for (int j = 0; j < 6; j++)
                 {
                     int n = rnd.Next(-25, 25);
                      dataGridView1.Rows[i].Cells[j].Value = n;
                      
                 }
             }
 
 
       }
 
        private void button2_Click(object sender, EventArgs e)
        {
          String s = "";
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    
                   s = dataGridView1.Rows[i].Cells[j].Value.ToString();
                   dataGridView2.Rows[i].Cells[j].Value = s;
                }
        }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.01.2020, 01:30

DataGridView - копирование столбца
Мне надо добавить столбец слева от выделенной ячейки. Делаю так: DataGridViewColumn dgvAdd =...

Копирование данных из Excel в DataGridView
Есть форма, на ней находится DataGridView допустим с 3-мя столбцами. Вопрос: Какие свойства у DataGridView надо поменять, чтобы при...

Копирование записи из одного DataGridView в другой
В общем название само себя объясняет. Суть: я выбираю запись в DataGridView и нажимаю на кнопку. Эта выбранная запись копируется в другой...

Копирование строки DataGridView из выпадающего меню
Добрый день, подскажите пожалуйста, как реализовать копирование строки DataGridView из выпадающего меню contextmenustrip. Как получить...

Копирование строки из одной datagridview в другую
у меня одинаковые таблицы . как сделать чтобы при нажатии на кнопку последняя добавленная строка в datagridview1 копировалась в...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru