【问题标题】:How to set a selected cell value ifrom a datagridview and use it to insert in a database?如何从 datagridview 设置选定的单元格值并使用它插入数据库?
【发布时间】:2018-06-20 03:04:34
【问题描述】:

我有一个数据网格视图,我想从中选择要从单元格中插入到表中的员工 ID 值。我有两个表,员工具有员工 ID(主键)、员工姓名和出勤,其具有员工 ID( FK)、日期、预计时间、时间和时间状态。我想插入一条由员工 ID 完成的员工出勤记录。因此,如果我选择单元格(员工 ID),我将为该特定员工插入。

这是我设置值的代码:

private void button2_Click(object sender, EventArgs e)
    {
        Attendance att = new Attendance();
        int id;

        try
        {
            att.SetEmployeeId(id = Convert.ToInt32(dataGridView1.CurrentCell));
            att.SetWorkDate(work_date_picker.Text);
            att.SetExpectedTime(expected_time_picker.Text);
            att.SetTimeIn(time_in_picker.Text);
            Database database = new Database();
            database.OpenConnection();
            database.AddAttendancetable(att);
            database.CloseConnection();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        this.Close();
    }

这是我的数据库操作代码:

   public bool AddAttendanceToTable(Attendance rowtosave, SqlConnection conn, 
        SqlCommand cmd)
   {

        Trace.WriteLine("saving to table");
        cmd.CommandText = "Insert Into Attendance 
        (emp_id,work_date,expected_time,time_in) 
        values(@emp_id,@work_date,@expected_time,@time_in)";
        cmd.Parameters.AddWithValue("@emp_id", rowtosave.GetEmployeeId());
        cmd.Parameters.AddWithValue("@work_date", rowtosave.GetWorkDate());
        cmd.Parameters.AddWithValue("@expected_time", 
         rowtosave.GetExpectedTime());
        cmd.Parameters.AddWithValue("@time_in", rowtosave.GetTimeIn());
        try
        {
            cmd.Connection = conn;
            cmd.ExecuteReader();
            MessageBox.Show("Data Added Successfully");

        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }

        return true;
    }

    void AddAttendancetable(Attendance 
    attendance)
    {
        AddAttendance addAttendance = new 
        AddAttendance();
     addAttendance.AddAttendanceToTable
   (attendance,conn, cmd);
              }

我收到错误消息,无法将 datagridview textboxcell 转换为 system.Iconvertible 类型

【问题讨论】:

  • 这段代码甚至无法编译。您的方法 AddAttendanceToTable 需要三个参数,但您只提供一个。如果您不使用逐字字符 @ 作为前缀,则插入 sql 文本也是不正确的
  • 还有关于你的出勤课程。你听说过 C# 属性吗?
  • 但我确实有 @ 字符。那不是我遇到的问题。插入方法工作正常。我已经用更多关于你的参数问题的代码更新了这个问题
  • 我遇到的问题是设置员工 ID
  • 我建议您使用调试器并设置两个断点来查看传递给您的 SetEmployeeId 的值以及从您的 GetEmployeeId 返回的值

标签: c# winforms datagridview sql-server-2014


【解决方案1】:

这对我有用

    if (dataGridView1.SelectedCells.Count >0)                                         

            {
                int selectedrowindex = dataGridView1.SelectedCells[0].RowIndex;

                DataGridViewRow selectedRow = dataGridView1.Rows[selectedrowindex];

                att.SetEmployeeId(id = Convert.ToInt32(selectedRow.Cells["emp_id"].Value));
                att.SetWorkDate(work_date_picker.Text);
                att.SetExpectedTime(expected_time_picker.Text);
                att.SetTimeIn(time_in_picker.Text);
                Database database = new Database();
                database.OpenConnection();
                database.AddAttendancetable(att);
                database.CloseConnection();
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多