/* dtTable_CellClick( object sender, DataGridViewCellEventArgs e ) * Cada vez que se selecciona un registro en el datagrid, se obtiene la información para * modificar/eliminar el registro. * Si se le da click a un registro, los valores aparecerán en el datagrid de * "Agregar/Modificar". */ private void dtTable_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0) { return; } if (dtTable.Columns["Detalle Compra"] != null && e.ColumnIndex == dtTable.Columns["Detalle Compra"].Index) { string idCompra = dtTable.Rows[e.RowIndex].Cells[0].Value.ToString(); string query = @"SELECT IdDetalleCompra, IdCompra, d.IdMaterial, m.Descripcion, CostoUnitario, Cantidad, Subtotal FROM Taller.DetalleCompra AS d INNER JOIN Taller.Material AS m ON d.IdMaterial = m.IdMaterial WHERE IdCompra =" + idCompra; if (ventanaRegistros != null) { ventanaRegistros.Close(); } ventanaRegistros = new VentanaRegistros(connectionSQL, query); ventanaRegistros.Show(); return; } List <string> values = GetRowValues(dtTable, e.RowIndex, true); dtRow.Rows.Clear(); dtRow.Rows.Add(values.ToArray()); //Nombre col + Valor List <Tuple <string, string> > registro = new List <Tuple <string, string> >(); for (int i = 0; i < dtTable.Columns.Count; ++i) { string nomColumna = dtTable.Columns[i].HeaderText; string valor = dtTable.Rows[e.RowIndex].Cells[i].Value.ToString(); var reg = new Tuple <string, string>(nomColumna, valor); registro.Add(reg); } for (int i = 0; i < dtRow.Columns.Count; ++i) { string nomCol = dtRow.Columns[i].HeaderText; Tuple <string, string> valor; if ((valor = registro.Find(r => r.Item1 == nomCol)) != null) { Tabla tabMostrar = tablas[comboBox1.SelectedIndex]; if (tabMostrar.AdditionalInfoCols != null && tabMostrar.AdditionalInfoCols.Exists(c => c == i)) { dtRow.Rows[0].Cells[i].Value = valor.Item2.ToString() + ": " + tabMostrar.EnumeracionInformacion.Find(en => en.Item1 == int.Parse(valor.Item2)).Item2; } else { dtRow.Rows[0].Cells[i].Value = valor.Item2; } } } }
/* * ShowTable( int index ) * Indexa en "tablas" la tabla seleccionada, recupera los registros de la base de datos * y los inserta en el datagrid. Se utiliza también para refrescar la vista de los registros. */ private void ShowTable(int index) { Tabla tablaMostrar = tablas[index]; string query; dtTable.DataSource = null; dtTable.Rows.Clear(); dtTable.Columns.Clear(); if (!string.IsNullOrWhiteSpace(tablaMostrar.SelectQuery)) { query = tablaMostrar.SelectQuery; } else { query = string.Format("SELECT * FROM Taller.{0}", tablas[index].TableName); } // crea un adaptador que va a obtener los datos por medio de la conección SqlDataAdapter adapter = new SqlDataAdapter(query, connectionSQL); tablaMostrar.Clear(); adapter.Fill(tablaMostrar); dtTable.DataSource = tablaMostrar; if (tablaMostrar.TableName == "Compra" && dtTable.Columns["Detalle Compra"] == null) { DataGridViewButtonColumn detalleCompra = new DataGridViewButtonColumn() { Name = "Detalle Compra", HeaderText = "Detalle Compra", UseColumnTextForButtonValue = true, Text = "Detalle" }; dtTable.Columns.Add(detalleCompra); } dtTable.Refresh(); //Obtener la información adicional de la tabla. if (!string.IsNullOrWhiteSpace(tablaMostrar.AdditionalInfoQuery)) { tablaMostrar.EnumeracionInformacion = new List <Tuple <long, string> >(); using (SqlDataReader lector = new SqlCommand(tablaMostrar.AdditionalInfoQuery, connectionSQL).ExecuteReader()) { while (lector.Read()) { var en = new Tuple <long, string>(lector.GetInt64(0), lector.GetString(1)); tablaMostrar.EnumeracionInformacion.Add(en); } } } // Fila de inserción dtRow.Columns.Clear(); int i = tablaMostrar.PK ? 1 : 0; for ( ; i < tablaMostrar.NomVariables.Count; i++) { string columna = tablaMostrar.NomVariables[i]; if (columna.Contains("Id")) { string comboQuery = string.Format("SELECT * FROM Taller.{0}", columna.Substring(2)); List <string> columnData = new List <string>(); using (SqlCommand command = new SqlCommand(comboQuery, connectionSQL)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { long id = reader.GetInt64(0); string opcion = id.ToString(); if (!string.IsNullOrWhiteSpace(tablaMostrar.AdditionalInfoQuery)) { if (tablaMostrar.AdditionalInfoCols != null && tablaMostrar.AdditionalInfoCols.Exists(col => col == i - 1)) { opcion += ": " + tablaMostrar.EnumeracionInformacion.Find(e => e.Item1 == id).Item2; } } columnData.Add(opcion.ToString()); } } } var column = new DataGridViewComboBoxColumn { HeaderText = columna, DataSource = columnData }; dtRow.Columns.Add(column); } else { dtRow.Columns.Add(columna, columna); } } dtRow.Rows.Add(); }