c#,修改人员信息时,对应表单的人员名字不对应的问题;

请教一下,我点主表单查询的数据行修改按钮,点击后弹出修改表单,但由于修改表单的人员下拉 列表,是关联的数据库的人员信息表,因此默认显示的是人员信息表的人员,而不是我想修改的这个人员名字,请问这样需要怎么处理呢;
以下是我的主表单的修改按钮代码,和修改表单的修改按钮代码;

请指导一下;

img


```c#
  if (e.ColumnIndex == dataGridView3.Columns["UpdateColumn"].Index)
                {

                    // 获取点击的行数据
                    DataGridViewRow selectedRow = dataGridView3.Rows[e.RowIndex];

                    if ((e.RowIndex >= 0))    
                    {                    

                         workerhourupdate f4 = new workerhourupdate();                    

                        f4.dateTimePicker1.Text = dataGridView3.SelectedCells[1].Value.ToString();//将准备修改的值,传递给新表单对应的文本框内,以下皆同;

                        f4.whubatchNo.Text = dataGridView3.SelectedCells[2].Value.ToString();

                        f4.comuprocess.Text = dataGridView3.SelectedCells[3].Value.ToString();

                        f4.comupname.Text = dataGridView3.SelectedCells[4].Value.ToString();

                        f4.whupulh.Text = dataGridView3.SelectedCells[5].Value.ToString();

                        f4.whuid.Text = dataGridView3.SelectedCells[0].Value.ToString();
                                              
                        f4.ShowDialog();
                     
    
                    }

                    else { MessageBox.Show("请您选择对应的行"); }
                                                                           
                }



```c#
 private void workerhourupdate_Load(object sender, EventArgs e)
        {           
            this.whuid.ReadOnly = true;//id不可修改,设定为只读功能;

            this.whuid.Enabled = false;//将id文本框置灰;

            string conn = "server = 192.168.100.247;database = Whmesinfo;user = sa; password = whyy@2021";

            SqlConnection connection = new SqlConnection(conn);

            connection.Open();

            SqlDataAdapter sda = new SqlDataAdapter();

            string sqlstring = "select distinct PersonName from a_PersonInfo";

            SqlCommand command = new SqlCommand(sqlstring, connection);

            sda.SelectCommand = command;

            sda.Fill(ds, "a_PersonInfo");

            comupname.DataSource = ds.Tables["a_PersonInfo"];

            comupname.DisplayMember = "PersonName";

            connection.Close();

        }

        private void btnupsave_Click(object sender, EventArgs e)
        {
            string IdValue = whuid.Text;
            string whudate = dateTimePicker1.Text;
            string whubatchNo = whbatchNo.Text;
            string whuprocess = comuprocess.Text;
            string whuname = comupname.Text;
            string whulh = whupulh.Text;
            string whnote = whupnote.Text;
          
            //SqlTransaction transaction = conn.BeginTransaction();

            try
            {
                             
               conn = new SqlConnection("server=192.168.100.247;database= Whmesinfo;user=sa;password=whyy@2021 ");

               conn.Open();

               string SqlString = @"update [dbo].[w_workerhour]
                                  set date=@date,batchNo=@batchNo,process=@process,name=@name,dulh=@dulh,note=@note 
                                  where id = @id";                                      
                  
               SqlCommand comm = new SqlCommand(SqlString, conn);//需要加上回滚事务;

               comm.Parameters.AddWithValue("@id", int.Parse(IdValue)); //以ID为唯一依据;
               comm.Parameters.AddWithValue("@date", DateTime.Parse(whudate)); // 替换为实际的日期值,以下相同;
               comm.Parameters.AddWithValue("@batchNo", whubatchNo);
               comm.Parameters.AddWithValue("@process", whuprocess);
               comm.Parameters.AddWithValue("@name", whuname);
               comm.Parameters.AddWithValue("@dulh", whulh);
               comm.Parameters.AddWithValue("@note", whnote); 

               comm.ExecuteNonQuery();

                //transaction.Commit();

               MessageBox.Show("数据保存成功!");

            }
            catch (Exception)
            {

                MessageBox.Show("更新失败");

                //transaction.rollback();            
                
            }

【以下回答由 GPT 生成】

问题分析:根据提供的信息,主表单的修改按钮代码中已经将需要修改的值传递给了新表单,但是新表单中的人员下拉列表显示的是数据库中的人员信息表,而不是需要修改的具体人员的名字。

解决方案: 1. 在修改表单workerhourupdate的类中,添加一个函数,用于从数据库中获取人员信息并绑定到人员下拉列表上。

```csharp private void BindWorkers() { // 根据需要使用的数据库连接方式和查询语句获取人员信息 string sql = "SELECT * FROM Workers"; SqlConnection connection = new SqlConnection("Your_Connection_String"); SqlCommand command = new SqlCommand(sql, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader();

   // 绑定人员信息到人员下拉列表
   while (reader.Read())
   {
       string workerName = reader["Name"].ToString();
       comboBoxWorkers.Items.Add(workerName);
   }

   connection.Close();

} ```

  1. 在修改表单workerhourupdate的构造函数中调用上面的函数,用于初始化人员下拉列表。

csharp public workerhourupdate() { InitializeComponent(); BindWorkers(); }

  1. 修改表单workerhourupdate中的代码,使得修改的员工的名字预先显示在人员下拉列表上。在主表单中传递需要修改的员工名字到修改表单,然后再修改表单的构造函数中设置人员下拉列表的选中项。

```csharp // 在主表单的修改按钮代码中修改以下部分 if (e.ColumnIndex == dataGridView3.Columns["UpdateColumn"].Index) { // 获取需要修改的员工名字 string workerName = dataGridView3.SelectedCells[3].Value.ToString();

   if (e.RowIndex >= 0)    
   {
       // 创建修改表单对象
       workerhourupdate f4 = new workerhourupdate();

       // 将需要修改的值传递给新表单对应的文本框内
       f4.dateTimePicker1.Text = dataGridView3.SelectedCells[1].Value.ToString();
       f4.whubatchNo.Text = dataGridView3.SelectedCells[2].Value.ToString();
       // 其他属性赋值...

       // 设置人员下拉列表的选中项为需要修改的员工名字
       f4.comboBoxWorkers.SelectedItem = workerName;

       f4.ShowDialog();
   }

} ```

以上就是解决该问题的具体步骤和代码示例,请根据实际情况进行相应的调整和修改。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

下断点调试下,dataGridView3.SelectedCells
这里选中的是什么,对不对

你赋值的时候窗体的Load事件还没有触发,赋值后第26行的ShowDialog触发Load事件,导致你的赋值在Load里被修改了;
所以要么把Load里的内容放到构造函数里,要么把数据传给窗体,让窗体在Load之后再赋值

首先断点给到修正按钮处理开始,看看选中行的人名是不是对的
然后再断点给到弹出页面的初始化,看看传过来的人名不是对的,
再看看你的Combox的Item是的取值
最后对一下Combox的属性,我记得好像是Combox的Text属性才能改变页面显示