Аватар для MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50

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

27.11.2011, 10:21. Показов 10473. Ответов 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
1485 / 939 / 455
Регистрация: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru