Рейтинг:
8
Karthik_Mahalingam
обратитесь встроенных комментариев
DataTable dt = new DataTable(); // create a table for storing selected rows
var dtTemp = dataGridView1.DataSource as DataTable; // get the source table object
dt = dtTemp.Clone(); // clone the schema of the source table to new table
DataTable table = new DataTable();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Selected)
{
var row = dt.NewRow(); // create a new row with the schema
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
row[j] = dataGridView1[j, i].Value;
}
dt.Rows.Add(row); // add rows to the new table
}
}
TheRealProgrammer
Хорошо, я понимаю. Проблема в том, что мне нужно отобразить все строки в моем dataGridView. Из dataGridView я выбираю то, что мне нужно, и то, что я выбрал, должно быть клонировано в DataTable. В этом примере dataGridView покажет только 1 результат, а не весь список.
Рейтинг:
1
OriginalGriff
Почему вы предполагаете, что i
действителен для обоих dataGridView_auswahlen
(источник строки) и table
(пункт назначения строки)?
Поскольку вы переносите только выбранные строки, если только ваш выбор не всегда начинается с первой строки и не имеет пробелов, вы всегда получите исключение.
Вместо использования индекса создайте новую строку с помощью объект DataTable.Невров[^], и добавьте это в свой DataTable. Затем вы можете использовать объект DataRow для добавления значений ячеек.
TheRealProgrammer
Я понимаю, но как я могу это реализовать? Я не могу понять, как я могу интегрировать это в свое "для".
OriginalGriff
Создайте свой DataTable, а затем добавьте столбцы перед циклом " for " - таким образом, Вы сможете дать им имена, которые помогут.
Затем внутри вашего "если" создайте экземпляр DataRow из DataTable и используйте этот экземпляр для установки значений столбцов в цикле, почти так же, как вы делаете это сейчас. Затем добавьте строку в таблицу.
Что в этом сложного? Возможно, я плохо объясняю...