gpt4 book ai didi

c# - 从 DataGridView 获取数据表

转载 作者:太空狗 更新时间:2023-10-29 21:36:26 31 4
gpt4 key购买 nike

我有一种形式是 CRUD,这种形式可以管理来自许多表的任何数据,如果表有外键,CRUD 会找到当前表的相应列的表和列,因此在 DataGridView 中可以显示列作为复选框、文本框或组合框

我在 DataGridView 填充数据之前完成所有这些操作,所以我不能使用它:

dataGridView1.DataSource = dtCurrent;

我需要这样的东西:

dtCurrent = dataGridView1.DataSource;

但只要给一个null

我已尝试将 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);

我得到一个关于重复值的异常(从西类牙语翻译):

对表的更改请求未成功,因为它们会在索引、主键或关系中创建重复值。更改包含重复数据的一个或多个字段中的数据,删除索引,或重新定义索引以允许重复条目,然后重试。

我只需要使用 DataTable 更新 DataGridView 中的更改

最佳答案

或者,这可能有助于将数据 GridView 转换为数据表。

Dim dt As New DataTable
dt = (DirectCast(DataGridView1.DataSource, DataTable))

对datatable直接在datagridview上做一个cast就可以得到最终的结果。

关于c# - 从 DataGridView 获取数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208114/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com