Пример #1
0
        /*Método que crea una instancia de la clase indice e inserta el dato de tipo hash dinamico*/
        private void hashDinamico(Atributo atr, string valor, long direccionReg)
        {//Recibe el atributo con indice hash, el valor convertido a binario y la direccion de la informacion en el registro de datos
            Indice ind = new Indice(entActual, atr, nombreEntidad, direccionReg);

            if (atr.dirIndice == -1)//Si el indice aun no ha sido creado en el archivo
            {
                ind.creaIndiceHashDinamico();
                int    valorInt     = Int32.Parse(valor.ToString());
                string valorBinario = regresavalorBinario(valorInt);
                ind.HashDinamico(valorBinario, atributos, entActual);
            }
            else
            {
                int    valorInt     = int.Parse(valor);
                string valorBinario = regresavalorBinario(valorInt);
                ind.HashDinamico(valorBinario, atributos, entActual);
            }
        }
Пример #2
0
        /*Evento de hacer clic en el boton de modificar*/
        private void bt_ModificarReg_Click(object sender, EventArgs e)
        {
            string strBin      = "";
            int    modificame  = 0;
            int    valorBin    = 0;
            long   dirRegistro = 0;
            int    posAtr      = 0;
            int    nuevo       = 0;

            if (!checa())
            {
                if (dgvRegistros.Rows.Count > 1)
                {
                    //Indice ind = n
                    int celda = 1;
                    foreach (TextBox tb in textBoxes)                     //Verifica en cada textbox
                    {
                        if (tb.Text != "")                                //Si no hay nada en el textBox, no entra. Solamente cuando hay algo por modificar.
                        {
                            switch (atributos[celda - 1].tipoIndice)      //SWITCH PARA MODIFICAR INDICES
                            {
                            case 2:                                       //Primario
                                if (atributos[celda - 1].tipoDato == 'E') //entero
                                {
                                    int  num           = int.Parse(tb.Text);
                                    int  valoraCambiar = (int)dgvRegistros.CurrentRow.Cells[celda].Value;
                                    long direccion     = (long)dgvRegistros.CurrentRow.Cells[0].Value;

                                    Indice ind = new Indice(atributos[celda - 1], nombreEntidad);
                                    ind.eliminaIndice(valoraCambiar);
                                    ind.guardaDatoEnteroIndicePrimario(num, direccion);
                                    //ind.modificaIndicePrimario(valoraCambiar, direccion, num);
                                }
                                else    //cadena
                                {
                                    string cadena        = tb.Text.PadRight(atributos[celda - 1].longDato - 1);
                                    string valoraCambiar = (string)dgvRegistros.CurrentRow.Cells[celda].Value;
                                    long   direccion     = (long)dgvRegistros.CurrentRow.Cells[0].Value;

                                    Indice ind = new Indice(atributos[celda - 1], nombreEntidad);
                                    ind.eliminaIndice(valoraCambiar);
                                    ind.guardaDatoStringIndicePrimario(cadena, direccion);
                                    //ind.modificaIndicePrimario(valoraCambiar, direccion, cadena);
                                }
                                break;

                            case 3:                                       //Secundario
                                if (atributos[celda - 1].tipoDato == 'E') //Entero
                                {
                                    int  num           = int.Parse(tb.Text);
                                    int  valoraCambiar = (int)dgvRegistros.CurrentRow.Cells[celda].Value;
                                    long direccion     = (long)dgvRegistros.CurrentRow.Cells[0].Value;

                                    Indice ind = new Indice(atributos[celda - 1], nombreEntidad);
                                    ind.eliminaIndiceSec(valoraCambiar, direccion);
                                    ind.indiceSecundario(num, direccion);
                                }
                                else    //String
                                {
                                    string cadena        = tb.Text.PadRight(atributos[celda - 1].longDato - 1);
                                    string valoraCambiar = (string)dgvRegistros.CurrentRow.Cells[celda].Value;
                                    long   direccion     = (long)dgvRegistros.CurrentRow.Cells[0].Value;

                                    Indice ind = new Indice(atributos[celda - 1], nombreEntidad);
                                    ind.eliminaIndiceSec(valoraCambiar, direccion);
                                    ind.indiceSecundario(cadena, direccion);
                                }
                                break;

                            case 6:     //Hash Dinámico
                                modificame  = 1;
                                valorBin    = (int)dgvRegistros.CurrentRow.Cells[celda].Value;
                                dirRegistro = (long)dgvRegistros.CurrentRow.Cells[0].Value;
                                posAtr      = celda - 1;
                                nuevo       = int.Parse(tb.Text);
                                //guardaDGV();

                                //indModifica.HashDinamico(strBin, atributos, entActual);
                                break;
                            }

                            switch (atributos[celda - 1].tipoDato)  //Aqui solo actualiza el DGV despues de modificar
                            {
                            case 'E':
                                int num = int.Parse(tb.Text);
                                dgvRegistros.CurrentRow.Cells[celda].Value = num;
                                break;

                            case 'C':
                                string cadena = tb.Text.PadRight(atributos[celda - 1].longDato - 1);
                                dgvRegistros.CurrentRow.Cells[celda].Value = cadena;
                                break;
                            }
                            tb.Text = "";
                        }
                        celda++;
                    }

                    if (dgvRegistros.Rows.Count > 2) //Ordena los valores segun la clave de busqueda para posteriormente ser guardados
                                                     //en el archivo .dat
                    {
                        celda = 1;
                        foreach (Atributo atr in atributos)
                        {
                            switch (atr.tipoIndice)
                            {
                            case 2:    //Clave de busqueda
                                switch (atr.tipoDato)
                                {
                                case 'E':
                                    List <int> listaInt = new List <int>();
                                    for (int num = 0; num < dgvRegistros.Rows.Count - 1; num++)        //filas
                                    {
                                        listaInt.Add((int)dgvRegistros.Rows[num].Cells[celda].Value);
                                    }
                                    ordenaClavedeBusquedaInt(listaInt, celda);
                                    break;

                                case 'C':
                                    List <string> listaStr = new List <string>();
                                    for (int num = 0; num < dgvRegistros.Rows.Count - 1; num++)        //filas
                                    {
                                        listaStr.Add((string)dgvRegistros.Rows[num].Cells[celda].Value);
                                    }
                                    ordenaClavedeBusquedaString(listaStr, celda);
                                    break;
                                }
                                break;
                            }
                            celda++;
                        }
                    }
                    guardaDGV();

                    foreach (Atributo atr in atributos)
                    {
                        if (atr.tipoIndice == 6)
                        {
                            modificame = 1;
                            break;
                        }
                    }

                    if (modificame == 1)
                    {
                        Indice indModifica = new Indice(entActual, atributos[posAtr], nombreEntidad, dirRegistro);
                        indModifica.encuentraRegistroaEliminar(valorBin, atributos[posAtr].dirIndice, atributos);

                        strBin = indModifica.numerosBinarios(nuevo);
                        indModifica.HashDinamico(strBin, atributos, entActual);
                    }
                }
                else
                {
                    MessageBox.Show("No hay registros existentes!!");
                }
            }
            else
            {
                MessageBox.Show("dato repetido");
            }
        }