Относительный путь в ASP.NET

У меня есть одна форма, которая является 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

8
задан tttony 23 April 2014 в 01:48
поделиться