我设法为我的编辑按钮和搜索按钮创建了一个代码。我的编辑按钮功能正常。它可以在数据库中编辑我的数据,我的搜索代码也是可用的。我的问题是编辑搜索结果中的数据。就像我搜索"火影忍者",我的datagridview将过滤所有具有" naruto"在数据库上。在我选择并双击结果后,所有数据将重新出现在我的文本框中。但是当我编辑这些数据时,它并没有起作用。相反,我的数据库中的第一个数据是不会改变我选择的数据。如果我不搜索任何姓名而不选择搜索结果,我的编辑代码就会正常工作。
这是我的代码。请帮助...
private void JOGridView_DoubleClick(object sender, EventArgs e)
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("Select * from JobOrder", con);
if (JOGridView.CurrentCell != null && JOGridView.CurrentCell.Value != null)
{
TBName.Text = JOGridView.SelectedRows[0].Cells[0].Value.ToString();
TBContact.Text = JOGridView.SelectedRows[0].Cells[1].Value.ToString();
CBStatus.Text = JOGridView.SelectedRows[0].Cells[2].Value.ToString();
TBModel.Text = JOGridView.SelectedRows[0].Cells[3].Value.ToString();
TBSerial.Text = JOGridView.SelectedRows[0].Cells[4].Value.ToString();
TBAccess.Text = JOGridView.SelectedRows[0].Cells[5].Value.ToString();
TBRB.Text = JOGridView.SelectedRows[0].Cells[6].Value.ToString();
TBRP.Text = JOGridView.SelectedRows[0].Cells[8].Value.ToString();
TBIT.Text = JOGridView.SelectedRows[0].Cells[10].Value.ToString();
CBRamarks.Text = JOGridView.SelectedRows[0].Cells[11].Value.ToString();
TBCharge.Text = JOGridView.SelectedRows[0].Cells[12].Value.ToString();
TBRELB.Text = JOGridView.SelectedRows[0].Cells[13].Value.ToString();
}
}
private void BTNEdit_Click(object sender, EventArgs e)
{
{
DialogResult dr;
dr = MessageBox.Show("Are you sure you want to Edit this record?", "Update Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr == DialogResult.Yes)
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM JobOrder", con);
da.Fill(dt);
dt.Rows[JOGridView.CurrentRow.Index].BeginEdit();
dt.Rows[JOGridView.CurrentRow.Index][1] = TBName.Text;
dt.Rows[JOGridView.CurrentRow.Index][2] = TBContact.Text;
dt.Rows[JOGridView.CurrentRow.Index][3] = CBStatus.Text;
dt.Rows[JOGridView.CurrentRow.Index][4] = TBModel.Text;
dt.Rows[JOGridView.CurrentRow.Index][5] = TBSerial.Text;
dt.Rows[JOGridView.CurrentRow.Index][6] = TBAccess.Text;
dt.Rows[JOGridView.CurrentRow.Index][7] = TBRB.Text;
dt.Rows[JOGridView.CurrentRow.Index][8] = DTDR.Text;
dt.Rows[JOGridView.CurrentRow.Index][9] = TBRP.Text;
dt.Rows[JOGridView.CurrentRow.Index][10] = DTDF.Text;
dt.Rows[JOGridView.CurrentRow.Index][11] = TBIT.Text;
dt.Rows[JOGridView.CurrentRow.Index][12] = CBRamarks.Text;
dt.Rows[JOGridView.CurrentRow.Index][13] = TBCharge.Text;
dt.Rows[JOGridView.CurrentRow.Index][14] = TBRELB.Text;
dt.Rows[JOGridView.CurrentRow.Index][15] = DTDR.Text;
dt.Rows[JOGridView.CurrentRow.Index].EndEdit();
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Update(dt);
displayrecords();
MessageBox.Show("Selected record has been Updated!", "Done Updating ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
clearrecords();
}
}
private void TBSearch_KeyUp(object sender, KeyEventArgs e)
{
if (TBSearch.Text == " ")
{
}
else
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * from JobOrder where Name like ('" + TBSearch.Text + "%')";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
JOGridView.DataSource = dt;
con.Close();
}
答案 0 :(得分:1)
如果没有看到更多代码,很难更具体,但核心问题至少部分是因为你没有使用MVVM(模型视图视图模型)或MVC样式之间的绑定查询结果和数据库查询。
这就是为什么您只更新表格中的第一行而不是选定的行
//creates a new table not visible or linked anywhere
DataTable dt = new DataTable();
//gets every record in JobOrder
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM JobOrder", con);
//fills the DataTable dt with all records from JobOrder
da.Fill(dt);
//uses the current index from the items in JOGridView to select a row in the unconnected/unrelated DataTable dt
dt.Rows[JOGridView.CurrentRow.Index].BeginEdit();
dt.Rows[JOGridView.CurrentRow.Index][1] = TBName.Text;
如果您希望它按照书面形式工作,您需要使用JOGridView.CurrentRow中的一些值并将其与dt中的行匹配。然后,您可以构建针对正确行的更新查询。
理想情况下,您将重新编写应用程序以使用适当的MVVM样式绑定自动为您执行所有连接。