/*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); } }
/*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"); } }