如何在c#中编辑搜索结果中的数据

时间:2017-10-23 23:15:14

标签: c# database search datagridview edit

我设法为我的编辑按钮和搜索按钮创建了一个代码。我的编辑按钮功能正常。它可以在数据库中编辑我的数据,我的搜索代码也是可用的。我的问题是编辑搜索结果中的数据。就像我搜索"火影忍者",我的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();
    }

1 个答案:

答案 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样式绑定自动为您执行所有连接。