Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据绑定时防止datagrid中的重复_C#_Wpf_Datagrid_Duplicates_Itemsource - Fatal编程技术网

C# 数据绑定时防止datagrid中的重复

C# 数据绑定时防止datagrid中的重复,c#,wpf,datagrid,duplicates,itemsource,C#,Wpf,Datagrid,Duplicates,Itemsource,经过一些测试,我用这种方法来处理我的datagriddgVariedad_CellEditEnding使用函数nombreVariedAddInResponsible(txtBoxTemporal.Text)检查新值是否已存在于列表Variedes中,并且有效。问题是该值不会插入数据库,而是会添加到datagrid控件中,我找不到取消控件中新行的方法 private List<Variedad> variedades = new List<Variedad>(); pri

经过一些测试,我用这种方法来处理我的datagrid
dgVariedad_CellEditEnding
使用函数
nombreVariedAddInResponsible(txtBoxTemporal.Text)
检查新值是否已存在于
列表Variedes
中,并且有效。问题是该值不会插入数据库,而是会添加到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();
            }
        }

    }

DataGridCellEditEndingEventArgs e
参数有一个
Cancel
参数,您可以将该参数设置为
true
。是的,但是
e.Cancel=true
仍将文本保留在datagrid上。
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;
    }