数据绑定时防止在datagrid中重复

时间:2018-07-14 16:39:40

标签: c# wpf datagrid duplicates itemsource

经过一些测试,我想到了这种方式来处理我的数据网格。 dgVariedad_CellEditEnding使用函数nombreVariedadDisponible(txtBoxTemporal.Text)来检查新值是否已在List<Variedad> variedades中存在并且可以使用。问题在于该值不会插入数据库中,而是会添加到datagrid控件中,我找不到在控件中取消新行的方法。

private List<Variedad> variedades = new List<Variedad>();
private void bindVariedad()
    {
        using (MySqlCommand cmd = Conexion.con.CreateCommand())
        {
            cmd.CommandText = "SELECT NOMBRE FROM DATAFRUT_VARIEDADES WHERE ELIMINADO = 'F';";
            Conexion.abrirConexion();
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            DataTable table = new DataTable("DATAFRUT_VARIEDADES");
            da.Fill(table);
            table.Columns[0].ColumnName = "Nombre";
            dgVariedad.ItemsSource = table.DefaultView;
            cmd.CommandText = "SELECT * FROM DATAFRUT_VARIEDADES WHERE ELIMINADO = 'F';";
            using (MySqlDataReader dr = cmd.ExecuteReader())
            {
                variedades.Clear();
                while (dr.Read())
                {
                    Variedad var = new Variedad();
                    var.codigo = Convert.ToInt32(dr[0]);
                    var.nombre = dr[1].ToString();
                    var.eliminado = Convert.ToChar(dr[2]);
                    variedades.Add(var);
                }
            }
        }
    }
    private void dgVariedad_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        TextBox txtBoxTemporal = e.EditingElement as TextBox;
        int indice = e.Row.GetIndex();
        if (e.Row.IsNewItem)
        {
            if (nombreVariedadDisponible(txtBoxTemporal.Text))
            {
                bool insertExitoso = false;
                using (MySqlCommand cmd = Conexion.con.CreateCommand())
                {
                    Conexion.abrirConexion();
                    cmd.CommandText = "INSERT INTO DATAFRUT_VARIEDADES VALUES (default, '" + txtBoxTemporal.Text + "', 'F');";
                    try
                    {
                        cmd.ExecuteNonQuery();
                        insertExitoso = true;
                    }
                    catch
                    {
                        MessageBox.Show("Error");
                    }
                    Conexion.cerrarConexion();
                }
                if (insertExitoso)
                {
                    variedades.Add(Variedad.cargarUltimoInsert(txtBoxTemporal.Text));
                }
            }
            else
            {
                e.Cancel = true;
            }
        }
        else
        {
            using (MySqlCommand cmd = Conexion.con.CreateCommand())
            {
                Conexion.abrirConexion();
                DataRowView dataRow = (DataRowView)dgVariedad.SelectedItem;

                cmd.CommandText = "UPDATE DATAFRUT_VARIEDADES SET NOMBRE = '" + txtBoxTemporal.Text + "' WHERE CODIGO = " + variedades[dgVariedad.SelectedIndex].codigo + ";";
                try
                {
                    cmd.ExecuteNonQuery();
                    variedades[dgVariedad.SelectedIndex].nombre = txtBoxTemporal.Text;
                }
                catch(MySqlException mex)
                {
                    MessageBox.Show("Error " + mex.Message);
                }
                Conexion.cerrarConexion();
            }
        }

    }

我在mysql上的表有3个字段:

  1. int codigo(主键,自动递增)
  2. string Nombre(唯一)字符
  3. char Eliminado-> Eliminado(已删除),其值(F =假,V = 是)

这是我检查值是否已经存在的方法。

private bool nombreVariedadDisponible(string nombreAComparar)
    {
        //busca el nombre en la lista "variedades"
        foreach (Variedad var in variedades)
        {
            if (var.nombre.ToLower() == nombreAComparar.ToLower() && var.eliminado == 'F')
                return false;
        }
        return true;
    }

0 个答案:

没有答案