当我点击包含更新代码

时间:2017-05-30 13:28:49

标签: c# winforms visual-studio

我有一个DataGridView,它显示从数据库中检索的项目列表。很少使用点击行的值更新的文本框和创建类实例的更新(btnAzuriraj)按钮,然后更新数据库并刷新数据网格视图。

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {

        DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
        tbID.Text = row.Cells[0].Value.ToString();
        tbIme.Text = row.Cells[1].Value.ToString();
        tbPrezime.Text = row.Cells[2].Value.ToString();
        tbAdresa.Text = row.Cells[3].Value.ToString();
        tbTelefon.Text = row.Cells[4].Value.ToString();
        if (row.Cells[5].Value.ToString() == "0")
        {
            cbPol.SelectedIndex = 0;
        }
        else
        {
            cbPol.SelectedIndex = 1;
        }
        dtbDatumRodjenja.Value = Convert.ToDateTime(row.Cells[6].Value.ToString());
    }
    //pacijent = new Pacijent(tbID.Text, tbIme.Text, tbPrezime.Text, tbAdresa.Text, tbTelefon.Text, cbPol.SelectedIndex, dtbDatumRodjenja.Value.Date.ToShortDateString());
}

private void btnAzuriraj_Click(object sender, EventArgs e)
{
    pacijent = new Pacijent(tbID.Text, tbIme.Text, tbPrezime.Text, tbAdresa.Text, tbTelefon.Text, cbPol.SelectedIndex, dtbDatumRodjenja.Value.Date.ToShortDateString());

    try
    {
        konekcija.Open();
        using (SqlCommand sql = new SqlCommand("UPDATE pacijent SET ime=@Ime, prezime=@Prezime, adresa=@Adresa, telefon=@Telefon, pol=@Pol, datumRodjenja=@DatumRodjenja WHERE id=@ID", konekcija))
        {
            sql.Parameters.Add(new SqlParameter("Ime", pacijent.Ime));
            sql.Parameters.Add(new SqlParameter("Prezime", pacijent.Prezime));
            sql.Parameters.Add(new SqlParameter("Adresa", pacijent.Adresa));
            sql.Parameters.Add(new SqlParameter("Telefon", pacijent.Telefon));
            sql.Parameters.Add(new SqlParameter("Pol", pacijent.Pol));
            sql.Parameters.Add(new SqlParameter("DatumRodjenja", pacijent.DatumRodjenja));
            sql.Parameters.Add(new SqlParameter("ID", pacijent.Id));

            sql.ExecuteNonQuery();
            ocistiPodatke();
            ucitajListuPacijenata();
            MessageBox.Show("Podaci o pacijentu " + pacijent.Ime + " " + pacijent.Prezime + " su uspesno azurirani.");
        }
    }

所有这些都运行良好,但请注意Cellclick方法中的注释部分。当我想更改其实例Pacijent类在Cellclick方法而不是btnAzuriraj_Click时,它将不会使用最新值更新数据库。为什么呢?

基本上我想要实例化一个类,并且每次单击DataGridView中的行时都要用不同的值填充它,而不仅仅是在我想要更新数据库时。我想这样做是因为我想将类值用于别的东西,而不仅仅是用于数据库更新。

问题更新。我甚至尝试在e.RowIndex >=0语句中实例化一个类。并检查它是否实际存储并从类对象中检索值。所有这些工作正常,但它不会更新数据库。

2 个答案:

答案 0 :(得分:0)

它是什么意思'它不会工作' ? pacijent未实例化 - 在其属性上获取空值而不是某些适当的值?

也许是因为您从

中实例化了pacijent

if (e.RowIndex >= 0) { }

子句,而Pacijent构造函数中使用的数据的初始化是在if() { }子句中完成的。

答案 1 :(得分:0)

看起来我忘了编辑类实例中文本框的最新值。所以看起来应该是这样的。

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {

        DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
        tbID.Text = row.Cells[0].Value.ToString();
        tbIme.Text = row.Cells[1].Value.ToString();
        tbPrezime.Text = row.Cells[2].Value.ToString();
        tbAdresa.Text = row.Cells[3].Value.ToString();
        tbTelefon.Text = row.Cells[4].Value.ToString();
        if (row.Cells[5].Value.ToString() == "0")
        {
            cbPol.SelectedIndex = 0;
        }
        else
        {
            cbPol.SelectedIndex = 1;
        }
        dtbDatumRodjenja.Value = Convert.ToDateTime(row.Cells[6].Value.ToString());
        pacijent = new Pacijent(tbID.Text, tbIme.Text, tbPrezime.Text, tbAdresa.Text, tbTelefon.Text, cbPol.SelectedIndex, dtbDatumRodjenja.Value.Date.ToShortDateString());
    }

}

private void btnAzuriraj_Click(object sender, EventArgs e)
{

    //pacijent = new Pacijent(tbID.Text, tbIme.Text, tbPrezime.Text, tbAdresa.Text, tbTelefon.Text, cbPol.SelectedIndex, dtbDatumRodjenja.Value.Date.ToShortDateString());

    pacijent.Id = tbID.Text;
    pacijent.Ime = tbIme.Text;
    pacijent.Prezime = tbPrezime.Text;
    pacijent.Adresa = tbAdresa.Text;
    pacijent.Pol = cbPol.SelectedIndex;
    pacijent.DatumRodjenja = dtbDatumRodjenja.Value.Date.ToShortDateString();

    try
    {
        konekcija.Open();
        using (SqlCommand sql = new SqlCommand("UPDATE pacijent SET ime=@Ime, prezime=@Prezime, adresa=@Adresa, telefon=@Telefon, pol=@Pol, datumRodjenja=@DatumRodjenja WHERE id=@ID", konekcija))
        {
            sql.Parameters.Add(new SqlParameter("Ime", pacijent.Ime));
            sql.Parameters.Add(new SqlParameter("Prezime", pacijent.Prezime));
            sql.Parameters.Add(new SqlParameter("Adresa", pacijent.Adresa));
            sql.Parameters.Add(new SqlParameter("Telefon", pacijent.Telefon));
            sql.Parameters.Add(new SqlParameter("Pol", pacijent.Pol));
            sql.Parameters.Add(new SqlParameter("DatumRodjenja", pacijent.DatumRodjenja));
            sql.Parameters.Add(new SqlParameter("ID", pacijent.Id));

            sql.ExecuteNonQuery();
            ocistiPodatke();
            ucitajListuPacijenata();
            MessageBox.Show("Podaci o pacijentu " + pacijent.Ime + " " + pacijent.Prezime + " su uspesno azurirani.");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        konekcija.Close();
    }
}