【问题标题】:Getting data from selected row in DataGridView, C# WinForms从 DataGridView 中的选定行获取数据,C# WinForms
【发布时间】:2020-07-09 06:26:00
【问题描述】:

如何读取整行并将其保存到变量中?我知道那里存储的是什么类型(自定义员工类型)。

我尝试过手动操作。

private async void AddEmployee()
        {
            var context = new NorthwindContext();
            int selectedRowCount = EmpMgmtDataGridView.Rows.GetRowCount(DataGridViewElementStates.Selected);
            if (selectedRowCount > 0)
            {
                for (int i = 0; i < selectedRowCount; i++)
                {
                    var employeeToAdd = new Employees();
                    employeeToAdd.FirstName = EmpMgmtDataGridView[1, i].ToString();
                    employeeToAdd.LastName = EmpMgmtDataGridView[2, i].ToString();
                    await context.AddAsync(employeeToAdd);
                    await context.SaveChangesAsync();
                }
            }
        }

但它的结尾是

SqlException: String or binary data would be truncated.
The statement has been terminated.

在 SaveChanges。 我正在尝试将其发送到数据库中,但我知道该怎么做,只是无法从 DataGridView 中获取它。

编辑

进行了升级,但以相同的错误结束。

private async void AddEmployee()
        {
            var context = new NorthwindContext();
            int selectedRowCount = EmpMgmtDataGridView.Rows.GetRowCount(DataGridViewElementStates.Selected);
            var rows = EmpMgmtDataGridView.SelectedRows;
            if (selectedRowCount > 0)
            {
                for (int i = 0; i < selectedRowCount; i++)
                {
                    var employeeToAdd = new Employees();
                    employeeToAdd.LastName = rows[i].Cells[1].ToString();
                    employeeToAdd.FirstName = rows[i].Cells[2].ToString();
                    await context.AddAsync(employeeToAdd);
                    await context.SaveChangesAsync();
                }
            }
        }

【问题讨论】:

    标签: c# visual-studio winforms .net-core datagridview


    【解决方案1】:

    确保您实际获取的是单元格的,而不是单元格对象本身:

    employeeToAdd.LastName = rows[i].Cells[1].Value.ToString();
    employeeToAdd.FirstName = rows[i].Cells[2].Value.ToString();
    

    【讨论】:

    • 它工作正常。谢谢你的帮助。我很确定我将无法获取日期(因为它们不是字符串),但我会先尝试寻找解决方案。
    • 没问题。可能Cells[x].ToString() 的长度太长,数据库无法处理。您可以通过简单地将 Cells[x].Value 解析为 DateTime 来获得类似的日期。
    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多