请教一下,我点主表单查询的数据行修改按钮,点击后弹出修改表单,但由于修改表单的人员下拉 列表,是关联的数据库的人员信息表,因此默认显示的是人员信息表的人员,而不是我想修改的这个人员名字,请问这样需要怎么处理呢;
以下是我的主表单的修改按钮代码,和修改表单的修改按钮代码;
请指导一下;
```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();
} ```
csharp public workerhourupdate() { InitializeComponent(); BindWorkers(); }
```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属性才能改变页面显示