У меня есть одна форма, которая является CRUD, эта форма может управлять любыми данными из многих таблиц, если таблица имеет внешние ключи, CRUD обнаружил таблицы и столбцы для соответствующих столбцов текущей таблицы, поэтому в DataGridView могут отображаться столбцы. как CheckBox, TextBox или ComboBox
Я делаю все это, ДО того, как DataGridView заполнится данными, поэтому я не могу использовать это:
dataGridView1.DataSource = dtCurrent;
Мне нужно что-то вроде этого:
dtCurrent = dataGridView1.DataSource;
Но просто дать ноль
Я пытался использовать ExtensionMethod для DataGridView:
public static DataTable ToDataTable(this DataGridView dataGridView, string tableName)
{
DataGridView dgv = dataGridView;
DataTable table = new DataTable(tableName);
// Crea las columnas
for (int iCol = 0; iCol < dgv.Columns.Count; iCol++)
{
table.Columns.Add(dgv.Columns[iCol].Name);
}
/**
* THIS DOES NOT WORK
*/
// Agrega las filas
/*for (int i = 0; i < dgv.Rows.Count; i++)
{
// Obtiene el DataBound de la fila y copia los valores de la fila
DataRowView boundRow = (DataRowView)dgv.Rows[i].DataBoundItem;
var cells = new object[boundRow.Row.ItemArray.Length];
for (int iCol = 0; iCol < boundRow.Row.ItemArray.Length; iCol++)
{
cells[iCol] = boundRow.Row.ItemArray[iCol];
}
// Agrega la fila clonada
table.Rows.Add(cells);
}*/
/* THIS WORKS BUT... */
foreach (DataGridViewRow row in dgv.Rows)
{
DataRow datarw = table.NewRow();
for (int iCol = 0; iCol < dgv.Columns.Count; iCol++)
{
datarw[iCol] = row.Cells[iCol].Value;
}
table.Rows.Add(datarw);
}
return table;
}
Я использую:
dtCurrent = dataGridView1.ToDataTable(dtCurrent.TableName);
Код не работает, когда:
int affectedUpdates = dAdapter.Update(dtCurrent);
Я получаю исключение в отношении дублированных значений (в переводе с испанского):
Изменения, запрошенные в таблице, не увенчались успехом, так как они создали бы повторяющиеся значения в индексе, первичном ключе или отношении. Измените данные в поле или полях, которые содержат повторяющиеся данные, удалите индекс или переопределите индекс, чтобы разрешить повторяющиеся записи, и повторите попытку.
Мне просто нужно обновить изменения в DataGridView, используя DataTable