【发布时间】:2018-04-04 14:53:48
【问题描述】:
我设法为我的编辑按钮和搜索按钮创建了一个代码。我的编辑按钮功能正常。它可以编辑我在数据库中的数据,我的搜索代码也可以使用。我的问题是编辑搜索结果中的数据。就像我搜索“火影忍者”一样,我的 datagridview 将过滤数据库中所有具有“火影忍者”的名称。在我选择并双击结果后,所有数据将重新出现在我的文本框中。但是当我编辑该数据时,它不起作用。相反,我数据库中的第一个数据是正在改变的数据,而不是我选择的数据。如果我不搜索任何名称并且不在搜索结果中选择,我的编辑代码就可以工作。
这是我的代码。请帮忙...
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();
}
【问题讨论】:
-
您是否在同一页面中编辑一行?不要将所有代码都塞进一页。应用关注点分离。当您点击搜索时,它将使用“火影忍者”过滤这些记录,然后当您单击要更新的记录时,获取该记录的 ID(主键)并将其带到另一个页面进行编辑。这样,您就可以更轻松地找出问题所在。
-
同页是什么意思?喜欢同一张桌子?如果您指的是表,那么是的。什么是关注点分离?你有任何样品可以帮助解决我的问题吗?
-
我的意思是,当您点击您处于编辑模式时,您是在同一个窗口中执行此操作还是正在加载另一个窗口来编辑记录?关注点分离意味着,我有一个单独的页面/窗口用于添加记录,然后是另一个单独的页面/窗口用于编辑,然后是另一个用于删除,另一个用于搜索列表(带有 datagridview 的窗口)。这样,我就不会将所有代码都塞进一个窗体/页面中,从而更容易分析和调试
-
在同一个窗口中加载它。我的保存、删除和编辑都是同一个窗口,只有一个datagridview。
标签: c# database search datagridview edit