Introducción
El articulo explica de que forma se puede seleccionar registros en el control DataGridView y pasarlos a otro, representando este la selección de las filas por el usuario.
En uno de los DataGridView se listaran productos, y por medio de un checkbox en cada fila, se podrá seleccionar que ítems se desean seleccionar.
Botones que indican la dirección serán los encargados de ejecutar la opción de pasaje.
El diseño de la interfaz puede apreciarse en esta imagen:
Carga de la lista de productos
Para esta operación se requerirá la ayuda del DataSet tipado el cual define la estructura de la entidad, pero será responsabilidad de la clase con sufijo DAL, la que cargara la información, proveniente de la base de datos.
private void frmPedidos_Load(object sender, EventArgs e) { // // Se recupera los datos de los productos desde la tabla // dtoProductos datos = ProductoDAL.ProductosGetAll(); // // Se bindean los datos a la grilla // dgvProductos.AutoGenerateColumns = false; dgvProductos.DataSource = datos; dgvProductos.DataMember = "Productos"; }
Selección de un ítem en la grilla de origen
Hay que destacar que la operación sobre un DataGridView difiere si esta se encuentra previamente enlazada a datos, o no.
En esta primera operación implica la sección de un producto que pasara a una lista no enlazada a datos, por lo tanto se podrá hacer uso de método Add() de la colección de Rows de la grilla.
private void btnSeleccionar_Click(object sender, EventArgs e) { // // Se define una lista temporal de registro seleccionados // List<DataGridViewRow> rowSelected = new List<DataGridViewRow>(); // // Se recorre ca registro de la grilla de origen // foreach (DataGridViewRow row in dgvProductos.Rows) { // // Se recupera el campo que representa el checkbox, y se valida la seleccion // agregandola a la lista temporal // DataGridViewCheckBoxCell cellSelecion = row.Cells["Seleccion"] as DataGridViewCheckBoxCell; if (Convert.ToBoolean(cellSelecion.Value)) { rowSelected.Add(row); } } // // Se agrega el item seleccionado a la grilla de destino // eliminando la fila de la grilla original // foreach (DataGridViewRow row in rowSelected) { dgvSeleccion.Rows.Add(new object[] {false, row.Cells["Descripcion"].Value, row.Cells["PrecioUnitario"].Value, row.Cells["UnidadMedida"].Value}); dgvProductos.Rows.Remove(row); } }
Hay que remarcar también que el uso de la lista temporal no es un capricho, sino que es necesaria ya que mientras se recorre una lista por medio de la instrucción “for each”, no pueden removerse elementos. Por esta razón es que en una operación siguiente se recorre la selección y allí si se procede a incluye los ítems en al grilla de destino y quitarla de la original.
Este punto lo he explicado con mas detalle siguiente articulo:
Selección de un ítem en la grilla de destino
Ahora le toca el turno a la operación contraria, y aquí hay un punto que ya se menciono en el paso previo, la lista de origen esta vinculada a datos de productos con lo cual usar el Rows.Add() no es posible.
Para esta operación se agregaran los datos directo en el origen, en este caso el datatable, que se ha creado dentro del DataSet tipado.
private void btnQuitar_Click(object sender, EventArgs e) { // // Se define una lista temporal de registro seleccionados // List<DataGridViewRow> rowSelected = new List<DataGridViewRow>(); // // Se recorre cada fila de la grilla de seleccion y se determian que registros estan checkeados // foreach (DataGridViewRow row in dgvSeleccion.Rows) { DataGridViewCheckBoxCell cellSelecion = row.Cells["SeleccionSel"] as DataGridViewCheckBoxCell; if (Convert.ToBoolean(cellSelecion.Value)) { rowSelected.Add(row); } } // // Se valida si hay algun registro por eliminar // if (rowSelected.Count > 0) { // // Se recupera el origen de datos que tiene asignada la grilla de productos // dtoProductos datos = dgvProductos.DataSource as dtoProductos; // // Se recorre cada item seleccionado y se arma programaticamente la fila del DataTable // se elimina el registro de la grilla de selecciones // foreach (DataGridViewRow row in rowSelected) { dtoProductos.ProductosRow productoRow = datos.Productos.NewProductosRow(); productoRow.Descripcion = Convert.ToString(row.Cells["DescripcionSel"].Value); productoRow.PrecioUnitario = Convert.ToDecimal(row.Cells["PrecioUnitarioSel"].Value); productoRow.UnidadMedida = Convert.ToString(row.Cells["UnidadMedidaSel"].Value); datos.Productos.Rows.Add(productoRow); dgvSeleccion.Rows.Remove(row); } // // Se binden los datos nuevamente, pero ahora con los nuevos registros // agregados del paso anterior // dgvProductos.AutoGenerateColumns = false; dgvProductos.DataSource = datos; dgvProductos.DataMember = "Productos"; } }
Es necesario analizar como toma los datos originales convirtiendo el contenido de DataSource de la grilla, en este caso a dtoProductos, ya que este es el tipo de datos utilizado en al carga original.
Se toman los datos originales, se procede a la creación de cada row de forma programática, asignando el valor a cada campo, por ultimo se vuelve a bindear la grilla.
[C#]
|
[VB.NET]
|
Hola:
ResponderEliminarAquí de nuevo con dudas :P, para mi proyecto algo similar solo que no use listas sino las propiedades de Add() y RemoveAt() del DataGridView, sin embargo mi duda entra en el siguiente ámbito: Lo que hice fue en el mismo Form, pero al querer hacerlo en 2, es decir que entres al FormPrincipal y dando click en el Boton agregar te visualiza una ventana donde seleeciono los productos con un CheckBox y al darle click en Aceptar, los productos seleccionados se pasen al DataGrid del Form Principal, sin embargo no lo hace, se queda vacio, a pesar de que tmb ya le cambie los attributos de private a public a los DataGrid.
Disculpa las molestias y espero puedas orientarme ;).
Gracias.
Hola Tania
ResponderEliminarTe comento que tenia un articulo previo que trata este tema
por ahi te ayude:
DataGridView – Parte 3 – Pasaje de información entre grillas en distintos formulario
saludos
que tal leandro una consulta :
Eliminarya tengo en un datagridview la lista de productos por ejemplo con su id,nombre,precio,tipo
pero ahora una vez listado , quiero que al seleccionar una fila se muestre la informacion del
tipo al que pertenece es decir...
por ejemplo selecciono la fila 01(id) leche(nombre) 10.0 (precio) tipo(a)
como en la lista original solo sale el id del tipo quiero que en el segundo datagridview se muestre el tipo en si es decir idtipo,nombre
en el caso de la leche deberia mostrar a(idtipo) , nombre(lacteos)... gracias
Leandro no tenido problemas para adaptar tu codigo a mi software, tengo la siguienta consulta, le he agregado un textbox al formulario, que quiero que me filtre los datos para buscar del datagridProductos para luego enviarlos al datagridSeleccionados, dataSetSel extraerDatos = cargaHerramietads.herra();
ResponderEliminarextraerDatos.Tables[0].DefaultView.RowFilter = ("Descripcion like '" + this.txtBuscar.Text + "%'");
this.dtgSeleccion.DataSource = extraerDatos.Tables["Herramienta"].DefaultView;
lo cual consigue el trabajo, pero cuando borro todos los datos del textbox me devuelve todos los datos del dataTabla incluso lo que ya fuero seleccionados.. por favor, me podrias explicar una opcion mejor
hola Edgar
ResponderEliminarEn principio te recomandaria que no realices el codigo tan largo usndo siempre
extraerDatos.Tables[0].DefaultView
podria asignarlo a una variable auxiliar
DataView view = extraerDatos.Tables[0].DefaultView;
view.Filter = string.Format( "Descripcion like '{0}%'", txtBuscar.Text);
dtgSeleccion.DataSource = view;
Habria que ver si estas limpiando correctamente el gridview cuando quitas el filtro que habias puesto, pero puede ser un analisis extenso, te recomendaria que realice la pregunta en el foro de MSDN:
Foro C#
Alli se podrias revisar el tema, yo participo bastante, puede que yo mismo te responda, o alguno de los muchos usuario activos.
saludos
Hola Leandro, gracias por tu ayuda. Necesito hacer esto. teniendo un datagridview (c#) con datos, como puedo agregarle a ese todos los datos de otro datagridview. me explico mejor. tenemos 2 datagridview con datos. como hago para que con un boton, todos los datos del dgv1 vayan a los del dgv2 pero sin borrarlos, osea adicionarlos, agregarlos y que se queden mostrando todos en el dgv2. espero me entendiras y espero tu respuesta muy pronto porque estoy embalao.
ResponderEliminarPD. no es agregar item por item o los items seleccionados, es pasar de una, con el click del boton todos los datos del dgv1 al dgv2 y agregarlos a los que ya habian allí
hola Gabriel
ResponderEliminarLa tecnica es igual a la explicada en el articulo, solo que en tu caso cuando recorras la grilla no harias una validacion si hay items selecionados, sino que tomarias todos los registros y los pasarias.
Por supuesto deberias aplicar la tecnica que aqui se refleja en el titulo "Selección de un ítem en la grilla de destino", pero visto al contrario no como un "quitar", sino que en el tuyo sera la seleccion de datos, en el ejemplo una de las grillas estaba enlazada a datos y la otra no, y resulto que la grilla cargada con datatable tipado es la inicial, en tu caso es la otra, la que recibe la seleccion.
Es por eso que los datos no los agregas directo en la grilla, sino que lo haces al datatable que esta tiene asignado.
bueno espero esto ayude un poco.
saludos
Hombre sisisisi, me has iluminado muchisimo. No sabes lo agradecido que me siento con vos por todas tus ayudas y orientaciones desinteresadas. Mucho ánimo a continuar con tu labor y ya sabes que tenes un buen amigo en Medellín Colombia.
ResponderEliminarDe nuevo muchas gracias.
muchas gracias por tus aportes,quisiera que me ayudaras quisiera que cuando paso los datos a otro datagrid poder insertar ciertos campos en una DB.
ResponderEliminarmuchas gracias
hola lo mejor
ResponderEliminarHabria que analizar si quieres insertar en la misma operacion cuando pasas los items entre las grillas, o si no conviene realizar la operacion en una accion separada cuando la lista de seleccion esta definida, quizas en un boton de aceptar los cambios.
Algo que no has mencionado es la db que usaras?
Igualmente la respuesta pueda ser algo larga para dar en este articulo por ahi podrias llevar la consulta para analizar en los foros de MSDN, donde participo, quizas te conteste yo, o algun otro miembro.
Foro C#
Foro VB.NET
alli se podra revisar los aspectos del insert con mas detalle
pero no olvides mencionas en que lenguaje programas, con que version del framework de .net, y que base de datos utilizaras
saludos
hola leandro la verdad quiero hacer lo mismo pero en vez de pasar la informacion a otro datagridview la quiero pasar a un formato que esta hecho en crystal report...como se podria hacer agradezco tu ayuda
ResponderEliminarhola andres felipe
ResponderEliminaro sea apuntas a algo como esto
[Crystal Reports] - Exportar DataGridView a Crystal
En tu caso por ahi no serian todas las rows del grid, sino solo las marcadas.
saludos
la verdad muchas gracias la verdad que me ha sido de mucha ayuda tu ayuda....excelente
ResponderEliminarHola una cosnulta como puedo hacer para pasar toda una fila de una gridview de un WindowsForm a un GridView de otro Windows form tu ayuda me servira de mucho mil gracias de ante mano
ResponderEliminarhola PROMEX
ResponderEliminarImagino seria pasar informacion de un form padre a uno hijo, si es asi valida este otro articulo:
[WinForms] – Pasaje de información formulario hijo
en este veras como pasar por medio del constructor o propiedades informacion al un formulario hijo.
saludos
Excelente aporte, me re sirvió para mi proyecto!!! Muchas Gracias Leandro!!!
ResponderEliminarLeandro. Que gusto encontrar este blog. Me parece genial que compartas tu conocimiento
ResponderEliminarNo se como enviarte algunas cosas que me gustaria preguntarte, asi que aprovecho que una de mis dudas va masomenos de la mano con lo que aca publicaste
Tengo un data grid view y cuando presiono enter cambia el indice de seleccion. Como soluciono esto?
Mil gracias
Cristhian
hola Cristhian
ResponderEliminardisculpa la tardanza, recien ahora veo la notificacion, se me mezclo con otros mensajes
bien mencionas que presioans enter, pero esta accion sobre que control la realizas, porque puede ser algo de la funcionalidad del propio control
saludos
hola muchas gracias por los aportes, lo he podido adaptar a mi proyecto, el unico problema q tengo es para regresar las filas del segundo datagrid al primero lo q sucede es q el primero esta enlazado con databinding, pero lo que me este entreteniendo no creo q sea eso lo q no entiendo son estas lineas del codigo
ResponderEliminardtoProductos datos = dgvProductos.DataSource as dtoProductos;
dtoProductos.ProductosRow productoRow = datos.Productos.NewProductosRow();
ya que la aplicacion q estoy haciendo es con mysql y ahorita ando algo perdido con acces talves mepuedes hechar una mano
muchas gracias!!!
hola Dark Alchemist
ResponderEliminarque uses mysql, sql server, access, o ciualquier otra db no deberia afectar a esas lienas que has puesto en al consulta, porque se trata de un dataset tipado que es idnetico sin importar la db que uses
pero recuerda que para lograr esto necesitas tener un .xsd, o sea un dataset tipado que construyes en base al modelo de tu db
el problema es que quizas no sea tan directo conectar mysql al Server Explorer del VS para generar el dataset tipado
por eso analzia este link
Accediendo a BD MySQL desde Visual Studio
saludos
Hola Leandro queria saber si me puedes ayudar en lo siguiente. Tengo un datagridView que lleno con un datarow, lo voy llenado fila por fila (es un detalle de un presupuesto),agrego y quito filas con eso no tengo problemas, ahora cuando quiero hacer una modificacion del detalle listo todo el detalle en el datagridview y me lista normal, tambien puedo quitar filas , pero al momento de agregar otra fila todo el contenido del gatagridview se borra. Como puedo hacer que no se borre. Agradesco mucho tu ayuda por anticipado. (Trabajo en c# aplicacion windows form)
ResponderEliminarhola Nico
ResponderEliminarno ahs revidado si en la logica de la aplicacion no haces algo que inicializa el datatable sin crear la copia previa de la lista a la cual debes agregar
o sea cuando manipulas las datarow de seguro usas un datatable para contenerlo y vincularlo al grid, quizas no estes recuperando los datos previos por eso se pierde lo que has registrado
saludos
Hola leandro no se si me pudas ayudar en la enumeracion de cada fila traigo los datos de una consulta pero no me enura las filas
ResponderEliminarhola jempdulintre
ResponderEliminarno se si entendi lo que quieres lograr
quieres enumeras las filas del grid?
como se relaciona esto con el articulo?
y que tiene que ver esta enumeracion con la accion de traer los datos? o es que esa enumeracion corresponde al id de los registors
saludos
Hola leandro , vi tu articulo en el foro de msdn , pero mejor te pregunto por medio de tu blog, como puedo adaptar tu código , a un procedimiento almacenado en cual debo de recibir un dato, porque baje el codigo y veo que dentro de la aplicacion haces referencia a la tabla de productos , como le haría yo para adaptarlo porque la verdad no pretendo hacerle una referencia a la tabla dentro de la aplicacion, no se si me puedas ayudar
ResponderEliminarhola David
ResponderEliminarno se si entendi la pregunta, o sea que uses un procedure o que pongas el query por el cual tomas los datos directo en el codigo no cambia la tecnica del articulo
quizas usarias algo como ser
using (SqlConnection cn = new SqlConnection(connstring)) {
SqlCommand cm = new SqlCommand("NombreStoreProcedure", cn);
cmd.CommandType = CommandType.StoredProcedure;
cm.Parameters.AddWithValue("@codigo", tbCodigo.Text);
DataTable dt = new DataTable();
MySqlDataAdapter da = new MySqlDataAdapter(cm);
da.Fill(dt);
}
para invocar a un procedure, pero despues el resto es igual
saludos
haa ok, 2 preguntas la primera puedo pasar por parametro lo que es txtCodigo , ya que estoy haciendo una clase dentro de la clase llenaria el datagridview y le mandaria por parametro lo que se escribidio en el txtcodigo se puede hacer eso ? , y lo que me tiene intrigado es porque creastes un dataset dentro de la aplicacion, se te hiso mas facil hacerlo por via podemos decirlo "grafica" que por medio de codigo
ResponderEliminarhola David
ResponderEliminarno recomiendo que en la clase cargues el datagridview, esta es responsabilidad de la presentacion, la clase deberia tomar datos simpel y devolver listas o datatable pero es en el form donde asignas el datasource del grid
a la funcion de la clase puedes pasarle el textbox.Text como valor para filtrar la query, pero es el string que pasas no el control
saludos
Hola leandro mira esto tengo en la clase:
ResponderEliminarpublic static DevolucionesYEnvios LlenarTanquesPendientesXCliente(int cliente)
{
con.Open();
DevolucionesYEnvios devo = new DevolucionesYEnvios();
cmd = con.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_LeerTanquesNoDevueltos";
cmd.Parameters.AddWithValue("@IdCliente", SqlDbType.Int).Value = cliente;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(devo,"vw_DevolucionTanques");
con.Close();
return devo;
}
#endregion
y cuando presiono el contenido de una celda del datagridview que tengo llamado clientes tengo esto:
private void dgCliente_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
cont1 = Convert.ToInt32(dgCliente.CurrentRow.Cells["Clave_Cliente"].Value.ToString());
DevolucionesYEnvios datos = Validaciones.LlenarTanquesPendientesXCliente(cont1);
dgPendientes.AutoGenerateColumns = false;
dgPendientes.DataSource = datos;
dgPendientes.DataMember = "vw_DevolucionTanques";
}
el problema que tengo es que no me sale nada en el datagridview de Pendientes
hola David
ResponderEliminarveo que defines AutoGenerateColumns = false;
pero ademas creas las columasn en timepo de diseño y asignas el DataPropertyName de esta para indciar con que campo mapea?
has puesto un breakpoint en el codigo he inspeccionado el dataset para ver si se cargo con registros
saludos
De hecho hice lo mismo que tu hicistes creo el dataset en la aplicacion, solo adapte el codigo que tu pusistes a lo que necesito no cambie nada !!
ResponderEliminarYa puse el break point y no lo llena
ResponderEliminarEl StoredProcedure me trai lo siguiente:
ResponderEliminarNumero_Factura = varchar
Codigo = varchar
Tipo = varchar
Medida = varchar
Fecha_Servicio = datetime
Fecha_Recibido = datetime
Ahora ya me salen vacios los campos !! :(
ResponderEliminarhola David
ResponderEliminarpro sino carga el datatable entonces claramente alli esta el problema
deberias validar si el cliente que asignas tiene registros como para devolver
ademas si lanzas el procedure directo desde la tool de sql server mangement studio este funciona correctamente? porque quizas el problema lo tenga el SP
saludos
Contestando la pregunta si envia algo !! ya provee el procedimiento en el sql server y de hecho envia datos
ResponderEliminarUtilizo el mismo codigo que tu !!! ahora si como se dice hice un copy y paste no mas
ResponderEliminarSabes leandro acabo de crear un xml para que envie lo que tiene el dataset
ResponderEliminarcmd = con.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_LeerTanquesNoDevueltos";
cmd.Parameters.AddWithValue("@IdCliente", SqlDbType.Int).Value = cliente;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(devo,"DevolucionTanques");
devo.WriteXml("C://dump.xml");
con.Close();
return devo;
y me salen los campos que quiero y ademas cree otro archivo en el cellcontentclick del otro datagridview y tambien me salen los campos, la verdad no se que sea , y la creacion de los xml para saber si esta regresando algo
hola David
ResponderEliminarentonces quiere decir que si se cargan los datos, es mas no necesitas del xml, podrias suar el debug
DataSet Visualizer
que pasa si en lugar de un dataset devuelves un datatable simple? solo para reducir problemas o sea hacer
ds.Fill(dt)
como esto quizas lleve algo de texto no prefieres que se siga el tema en el foro msdn de c#, me parece un lugar mas adecuado para escribir
saludos
Entonces comentare en el msdn
ResponderEliminarhola leandro si en la parte del codigo donde envias la fila a un list<>
ResponderEliminartambien le asignas el row a un dataTable algo como esto:
foreach (DataGridViewRow row in dgvSeleccion.Rows)
{
DataGridViewCheckBoxCell cellSelecion = row.Cells["SeleccionSel"] as DataGridViewCheckBoxCell;
if (Convert.ToBoolean(cellSelecion.Value))
{
rowSelected.Add(row);
DtablePedido.Rows.Add(row); //<----adiciono mejor a un dataTable
}
}
lo que necesito es para llevarlo a un datatable para poder editarlo y /o borrar filas
Gracias por tu pronta respuesta
hola greg_dorian
ResponderEliminarno entendi, cual seria el objetivo de agregar al datatable?
porque esa lista que uso es algo temporal para determinar la seleccion, pero luego se recorre para realizar las operaciones de eliminar, porque dentro de un bloque for no puede eliminar el item que estas recorriendo
saludos
Hola Leandro Gracias por responder, pues la idea es que tengo 2 datagrids como tu lo usas pero en el segundo poder realizar edicion de alguno de los campos, por decir algo cambiar la cantidad o el "precio" del datagrid dgvSeleccion, tambien que el dgvSeleccion pueda consultar y agregarle mas registros... y luego de esto llevarlo o grabarlo a base de datos
ResponderEliminarotra aclaracion en el evento btnQuitar de hecho tienes un DataTable y armas programaticamente la fila del DataTable para poder eliminar el registro de la grilla de selecciones
ResponderEliminarhola greg
ResponderEliminarno veo cual es el problema, puedes definir uan columan editable en donde el usuario pueda ingresar un valor para esa fila
despues solo haces un loop por cada row para persistirlo
http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/3c2637db-0d8d-4a70-95c8-ee6165ee821d
saludos
hola Leandro, si eso lo que tu dices de que pueda editar el datagrid y editar la columna o la celda, pero yo me refiero en el caso que vuelvas a recuperar la informacion para (modo de edicion) tienes que volver a cargar el datagrid dgvSeleccion con los datos ya seleccionados y que aun falten pedidos por selecionar para poderlos agregar... necesariamente se debe utilizar DataTables... o que otra medida se podria utilizar??
ResponderEliminarhola greg
ResponderEliminarel datatalbe no es obligatorip, puedes suar cualquier otro tipo de coleccion, si usas List<> listas genericas, algun otro son igual de validas
este es solo un ejemplo que uso datatable como medio para cargar datos, pero si usas otro tipo de lista castea lo que pongas en session a este tipo y lo trabajas
saludos
Buen día!!
ResponderEliminarEstoy haciendo un programa en visual Studio 2010 Y lleno una grilla de la siguiente manera
cnn.Open();
using (DB2DataReader rdr = cmd.ExecuteReader())
{
BindingSource bnd = new BindingSource();
DataTable tbl = new DataTable();
tbl.Load(rdr);
tbl.Columns.Add(new DataColumn("Eliminar usuario", typeof(bool)));
bnd.DataSource = tbl;
dgv.DataSource = bnd;
}
cnn.Close();
la intento recorrer e imprimir en consola el resultado de los seleccionados de la siguiente manera
foreach (DataGridViewRow row in dgv.Rows) {
if ((dgv.Columns[2].ValueType.Equals(typeof(bool))) == true)
{
Console.Write(dgv.Columns[0]);
}
pero no consigo imprimir y no sé qué es lo que hago mal si me pudieran iluminar un poco please!! se los agradecería. saludos !!
hola:
ResponderEliminartengo problemas con la primer linea de codigo a que se puede deber?? gracias
hola Graciela
ResponderEliminarsi vas a cargar un datatable porque no usas el DB2DataAdapter
DB2DataAdapter da = new DB2DataAdapter(cmd);
DataTable tbl = new DataTable();
da.Fill(tbl);
dgv.DataSource = tbl;
saludos
hola Alejandro
ResponderEliminarpero cual seria el problema ?
deberias especificar algo mas la problematica
saludos
Gracias por contestar es solo que mi problema no es llenar la tabla, ésta si se llena bien y la columna de "selección" la uso para verificar las filas que deseo eliminar solo que no sé muy bien como recorrer la tabla para obtener las chekeadas intenté con el for each pero aun no tengo éxito.
ResponderEliminarhola Graciela
ResponderEliminartomado la idea del articulo
List rowEliminar = new List();
foreach (DataGridViewRow row in dgvProductos.Rows)
{
DataGridViewCheckBoxCell cellSelecion = row.Cells["Seleccion"] as DataGridViewCheckBoxCell;
if (Convert.ToBoolean(cellSelecion.Value))
{
rowEliminar.Add(row);
}
}
foreach(DataGridViewRow row in rowEliminar){
dgvProductos.Rows.Remove(row);
}
para recorer las filas que estan marcadas, pero ojo que alli mismo no vas a poder eliminarlas, vas a necesitar de una lsita auxiliar
entonces si recorriendo al lista auxiliar puede eliminar del grid
saludos
Gracias Leandro lo revisaré
ResponderEliminarHola Leandro regreso a dar lata. Mi pregunta no tiene que ver con el tema, pero espero me puedas ayudar, he creado un proyecto de instalación pero no sé qué opciones marcar como requisitos previos, seleccione el framework4 y SAP para crystal incluí los runtime de crystal, pero no sé, si es del todo necesario marcar las opciones pues es tardado estar descargando todo en otra pc y además mi aplicación es detectada como de baja reputación por el avast, existe una forma de mejorar su reputación??
ResponderEliminarhola Graciela
ResponderEliminarla verdad no sabria decirte que parametros toma el avast para definir una reputacion
quizas el hecho de conectarse a internet para descargar sea el motivo de baja reputacion
no has evaluado ver la forma de incluir los redistribuibles por separado de la instalacion, para que se instalen de forma manul y asi no descargarlo
o al menso intentar hacerlo para ver si es esto lo que genera el problema de reputacion
saludos
V. A.
ResponderEliminarEstimado Leandro,
Necesito hacer lo siguiente, no se si me puedas ayudar, quiero usar dos datagridview, mientras escribo en el campo de uno, el otro se posesione debajo del otro, osea debajo de la fila donde estoy escribiendo, solo eso necesito.
Gracias.
hola V:A.
ResponderEliminaresto que planteas no se puede lograr, no al menos con el datagridview, quizas si usas algun control de terceros que permitan desplegar un nuevo grid asociado a un row
pero sera con un componente de terceros que lo podrias lograr
saludos
quiero enviar los datos de los checkbox seleccionados a otra pantalla en diferentes textbox como puedo hacer esto??
ResponderEliminarlos textbox los tengo en diferentes paneles
ResponderEliminarlos checkbox están en un gridview
ResponderEliminarhola alex
ResponderEliminarpero que tipo de desarollo estas realizando porque mencioans el gridview, o sea es un desarrollo web ?
saludos
si Leandro es web.ya solucione eso lo hice con listas ahora mi problema es como sacar los objetos eh ingresarlos a los textbox un ejemplo si mi lista trae 2 objetos que se llenen mis 2 textbox ejemplo los llame txt1 ,txt2 estos están en paneles diferentes gracias espero me puedas ayudar
ResponderEliminary si trae 5 objetos que se llenen mis 5 textbox
ResponderEliminarhola alex
ResponderEliminarpor paneles te refieres a controles Panel? si es podrias acceder directo a los controles por su nombre
o es que estos controles estan dentro del gridview, porque si es asi deberias usar el FindControl() para localizar los textbox
saludos
List list = new List();
ResponderEliminarif (Session["ruta"] != null)
list = (Session["ruta"] as List);
aquí esta mi código donde estoy obteniendo la lista con sus objetos
ahora mi problema es sacar los objetos y meterlos a los textbox
como puedo hacerle
List list = new List();
ResponderEliminarif (Session["ruta"] != null)
{
list = (Session["ruta"] as List);
list list = new list();
ResponderEliminarif (sesión["Ruta"]!= null)
{
list=(sesión["Ruta"]as list);
gracias ya encontré la solución quisiera preguntarte si conoces un método donde al darle clic a un botón me agregue un panel nuevo
ResponderEliminargracias
se podría que dentro de ese panel lleve un textbox un lavel y una tabla HTML gracias espero tu respuesta
ResponderEliminarya lo solucione gracias
ResponderEliminarjaja ya me surjio otra duda utilizo mi método para cuando de clic en el botón me abra un nuevo panel el problema que solo me lo abre una sola vez si le sigo dando clic ya no me abre mas paneles por que este es mi código
ResponderEliminarPanel nuevo = new Panel();
Label etiqueta = new Label();
etiqueta.Text = "nuevo";
nuevo.Controls.Add(etiqueta);
Paneldg1.Controls.Add(nuevo);
hola alex
ResponderEliminarno es que no se abre, sino que se estan ensimando uno sobre otro
agrega una simple variante y veras esto que comento
private index=0;
private void button1_Click(..)
{
Panel nuevo = new Panel();
Label etiqueta = new Label();
etiqueta.Text = string.Foramt("nuevo {0}", index);
nuevo.Controls.Add(etiqueta);
Paneldg1.Controls.Add(nuevo);
index++;
}
veras como cambia de contenido, pero estas agregando paneles uno arriba de otro, cuando deberias eliminar las instancias anteriores usando un
Panel.Controls.Clear()
saludos
gracias otra consulta como hago para agregar una tabla HTML
ResponderEliminarahí dentro del panel
para cuando de clic en el botón me agregue el textbox ,label y una tabla HTML
agradezco tus respuestas
espero me puedas ayudar con esta
hola alex
ResponderEliminarpodrias usar la clase
HtmlTable (Clase)
para generar la tabla desde codigo
o sino podrias usar un GridView, el cual tambien genera una tabla
saludos
Hola Leandro, Buenos días, me gustaría saber si existe alguna forma de unir guardar una serie de listas de objetos en un mismo datagridView. Por ejemplo, cuando lleno un datagridView. DataSource = BindingList luego que lleno el datagrid de personas es muy sencillo obtener los datos de la fila, pero necesito como llenar el mismo datagrid con un BindingList de personas, uno de casas, etc, Por eso tenía la duda si se pueden guardar varias bindinglist en un mismo datagrid para obtener los objetos más rápidamente
ResponderEliminarhola Erick
ResponderEliminarsi las listas tienen la misma cantidad de campos y los tipos de cada uno de estos son identicos podrias unirlos en una sola lista y mostrarlo en el grid
podrias tomar una lista de base y usar el AddRange() para agregar otra a la existente, para esto mantiene una variable a nivel del form la cual usaras para ir agregando las otras listas y al final asignas esta al grid
si los datos que vas a mostrar difieren entonces no se podra lograr
saludos
Hola Leandro, tengo una duda si paso unos 3 productos a la otra grilla y tubiera un campo extra llamado Stock, como aria para registrar cada una de las filas en una base de datos en una tabla de ventas por ejemplo, y actualizar el campo stock cada uno de los productos restandole la cantidad vendida... espero me puedan ayudar
ResponderEliminarhola Carlos
ResponderEliminarbueno responder a esa pregunta seria un poco largo, pero aqui
http://social.msdn.microsoft.com/Forums/es-ES/47cfd60c-5e77-4e23-915e-b995e7a57ec8/descontar-stock
http://social.msdn.microsoft.com/Forums/es-ES/375813b0-8e92-4361-9f07-e726e00c2c94/ejemplo-de-un-proyecto-tipo-stock
http://social.msdn.microsoft.com/Forums/es-ES/5c60f2a0-b43b-4a5f-bbe4-e85ff6e8d598/actualizar-el-stock-en-la-capa-negocio
se plantean temas relacionados con stock, como veras si tienes el producto o articulo al cual descontar podrias realziar un UPDATE para actualizar los datos
saludos
Cheque los link que pusistes y si hablan de actualizar el stock bueno creo que eso nos es problema igual se puenden usar triger para ya no codificar eso, el problema esta en que si tengo varios productos en un grlla no se registra cada uno de ellos si no que agarra el de la primera fila y almacena los datos que estan en esa fila y actualiza solo ese producto, como aria para registrar cada uno de los productos que estan en una grilla llamada lista de productos a vender por ejemplo.
ResponderEliminarhola Carlos
ResponderEliminarpero estas realizando un loop por cada row del grid para aplicar los cambios?
en los links sino vi mal se aplica algo como esto recorriendo las rows y actualizando el registro con la entidad que define
saludos
hola leandro pues si eso trato de hacer pongo todo ese procedimiento en un foreach pero solo hagara el primer elemento de la lista este es mi codigo usando conexiones ADO
ResponderEliminar//Registramos en la tabla ventas
rVenta.Insert(int.Parse(cboCliente.SelectedValue.ToString()), int.Parse(cboEmpleado.SelectedValue.ToString()), cboTipoDoc.Text, txtNroDoc.Text,
DateTime.Parse(txtFecha.Text), float.Parse(txtTotal.Text));
//Obtenemos el maximo idVenta
int codVenta = int.Parse(rVenta.MaxIDVentas().ToString());
//Recorremos la lista de productos a vender
foreach (DataGridViewRow fila in dgvLista.Rows)
{
//Comenzamos a registrar en la tabla DetalleVenta
rDetalleV.Insert(codVenta, int.Parse(fila.Cells[0].Value.ToString()), float.Parse(fila.Cells[4].Value.ToString()), float.Parse(fila.Cells[5].Value.ToString()),
int.Parse(fila.Cells[6].Value.ToString()), float.Parse(fila.Cells[7].Value.ToString()), float.Parse(fila.Cells[8].Value.ToString()));
//Obtenemos el stock del producto y restamos la cantidad comprada
//int stock = int.Parse(dgvProductos.CurrentRow.Cells[5].Value.ToString()) -
// int.Parse(int.Parse(fila.Cells[5].Value.ToString()).ToString());
int stock = int.Parse(productosTableAdapter.MaxStock(int.Parse(fila.Cells[0].Value.ToString())).ToString()) - int.Parse(int.Parse(fila.Cells[6].Value.ToString()).ToString());
//Actualizamos el campo stock
productosTableAdapter.ActualizarStock(stock, int.Parse(fila.Cells[0].Value.ToString()));
//Limpiamos y volvemos a cargar los productos
dsGeneral.Productos.Clear();
productosTableAdapter.Fill(dsGeneral.Productos);
hola leandro queria descargar el archivo y me sale un mensaje de skydrive diciendome que el elemento ya no esta disponible o no exista...
ResponderEliminarhola Maicol8k
ResponderEliminarya esta actualizado los link del codigo
saludos
Necesito por favor que me orientes...
ResponderEliminarTengo que hacer un proyecto sobre una tienda de ropa, que con un boton me muestre un inventario(no puedo usar ninguna base de datos solo visual studio C#)con caracteristicas de las prendas y la cantidad existente, para que cuando se haga una venta la cantidad existente en el inventario disminuya.
Te Agradecería mucho si me ayudas ya que no manejo bien c# y este proyecto es muy importante.
hola Nohelia
ResponderEliminarpero si necesitas conservar los datos del inventario donde vas a persistir la informacion ?
los datos de prendas, sus cantidades, o sea el stock, de donde obtendras la informacion? lo pregunto porque comentas que no puedes usar una db
sera que vas a usar un objeto que mantienes en memoria y serializas a xml en un archivo para persistir los datos
saludos
Hola Leandro,
ResponderEliminarNecesito recorrer un datagridview el cual es cargado con datos de excel. Luego mostrar en un texbox la cantidad de registros que posea el archivo. Lenguaje c#. Adicional a esto poder agregar un nuevo registro o eliminarlo o actalizarlo.
De antemano muchas gracias..
hola Camilo
ResponderEliminarel acceso a excel lo realizas por medio de ado.net ?
porque si es asi podrias eejcutar queries sql para calcular u operar con los datos del excel, como si fuera una db
Reading and Writing Excel Spreadsheets Using ADO.NET C# DbProviderFactory
saludos
Muchas gracias,
ResponderEliminarSi claro estoy con Ado mas o menos con una cadena de conexión.
connectionString cadena = @ "Provider = Microsoft.Jet.
OLEDB.4.0; origen de datos = Book1.xls; ampliada
Propiedades = "" Excel 8.0; HDR = YES; "" ";
Necesito ahora poder recorrerlo para analizar cuantos registros tiene, luego mostrar esa cantidad en un textbox. Actualmente cuento con un fileUpload, un boton que me muestra el archivo y un gridview que muestra la data o información del excel.
Gracias por tu ayuda..
hola Camilo
ResponderEliminarpero no se necesita recorrer, si estas realizando un SELECT contra el excel, carga un datatable y usa
int cant = dt.Rows.Count;
listo ahi tiene la cantidad
saludos
Leandro tengo una pregunta, quiero automatizar un textbox para utilizarlo como numero de registro. cada vez que guarde pase automaticamente al siguiente numero.
ResponderEliminarhola Gustavo
ResponderEliminarpero usas algun base de datos ? porque no lo has mencionado
si la usas podrias implementar el MAX() en el SELECT para obtener el valor del nro mas grande he ir sumando uno
analiza la implementacion del Max() que utilizo aqui
[ADO.NET] – Parte 5 - Ejemplos Simples – Operaciones CRUD
saludos
Hola Leandro, estoy utilizando tu tecnica del ejemplo pero para recuperar los datos para un formulario maestro-detalle. Todo lo tengo en capas como tu ejemplo de facturas N-Capas pero no me funciona, me podrian enviar alguna pagina donde se exista algun ejemplo.
ResponderEliminargracias
hola Richard
ResponderEliminarpero que seria lo que no funciona ?
obtienes algun error en concreto
saludos
dtoProductos.ProductosRow productoRow = datos.Productos.NewProductosRow();
ResponderEliminarObject reference not set to an instance of an object.
me pide que instansie el objeto
hola E. Flores
ResponderEliminarpero cuando falla cual es el objeto que esta en null?
puede ser "datos" o quizas "Productos", al fallar si pasas el mouse por sobre estos puedes ver cual esta en nulo?
saludos
Leandro podrias responderme a la duda de msd por favor? http://social.msdn.microsoft.com/Forums/sqlserver/es-ES/1a7d3894-83b3-4fcb-97a3-800b44445e1c/pasar-datos-de-datagridview-secundario-a-datagridviewprincipal?forum=vcses
ResponderEliminarhola Mikel
ResponderEliminarrespondi en el foro
saludos
Perdonar alguien podria explicarme el origen de estos conceptos?
ResponderEliminardtoProductos
ProductoDAL.ProductosGetAll()
.ProductosRow
datos.Productos.NewProductosRow()
Son lo UNICO que me falta por entender
y si contienen codigo cual seria ese codigo
hola Mikel
ResponderEliminarlo que veas como DAL hace referencia a Data Access Layer, o sea es la capa de acceso a datos encargada de usar ado.net para recuperar datos de la db
en este ejemplo utilice dataset tipados, por es veras un archivo de nombre dtoProductos.xsd, alli esta la definicion
saludos
vale gracias por aclararlo. podria hacerse de alguna manera sin tener que derivar a objetos externos? quiero decir sin dataset tipado y con el acceso a datos en el mismo formulario y simple.
ResponderEliminarSiendo una base de datos access del 2010.
Gracias de antemano
hola Mikel
ResponderEliminarsi claro, pero alli no aplicarias las buenas practicas para separar las responsabilidades
podrias poner ado.net directo en el evento del form
saludos
muy interesantes esos tutoriales pero ... estoy aciendo una aplicacion y espero que me puedas a yudar si estas a tu alcance..
ResponderEliminarestoy haciendo una aplicacion donde boy insertando registro a un datagrid desde un texboox pero quiero que al momento de insertar que si esta repetido que me lo actualice es en c# y no requiere base de datos
hola
ResponderEliminarpodrias ayudarte con linq para localizar que row tiene un valor igual al que estas queriendo insertar
harias algo como ser
DataGridViewRow row = DataGridView1.Rows.Cast().Where(x=> Convert.ToString(x.Cells["nombrecol"].Value) == TextBox1.Text).FirstOrDefault();
if(row == null){
//si es null entonces no encontr la row por lo que puedes insertar el valor
} else{
//si la encontrol la actualizas
row.Cells["nombrecol2"].Value = TextBox2.Text;
}
saludos
Hola Leandro.
ResponderEliminarFijate que tu tutorial me sirvio mucho, segui todo al pie de la letra sin embargo no me jala los datos de mi tabla cuando cargo el datagridView, y me marca error en esta linea:
using (OleDbConnection conexion = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) {
especificamente en el ConfigurationManager, ya revise las bibliotecas y estan bien, que me recomiendas?
hola Samuel
ResponderEliminarlastima que no mencionas cual es el mensaje de error que recibes, pero podria deberse a que tienes que agregar la referencia y declarar el using de System.Configuration
sin la referencia en el proyecto a esta librerias la clase ConfigurationManager no te dejara compilar
Tambien valida que tengas en el App.config la definicion de la key de nombre "default" del connection string
saludos
Logre resolver ese inconveniente y ya me pasa de uno a otro, sin embargo a la hora de regresar la informacion, tiene que cargar los datos enlazados, pero es necesario que guarde la base de datos en el programa? porque mi base de datos estaría en un servidor, seria diferente? gracias por tu ayuda.
ResponderEliminarhola Samuel
ResponderEliminarla base de datos puede estar donde quieras, si la db esta en un servidor y te cnectas remoto solo tienes que definir esto en el .config y listo
por supuesto en el connectionstring deberias indicar el nombre de la db a la cual te vas a conectar
saludos
hola hice un procedimiento en mi data set mi duda es como mandar llamar ese procedimiento.
ResponderEliminarhola KEKO
ResponderEliminarpodrias usar lo que comento aqui
Ejecutar Stored Procedure desde c#
saludos
Hola, buen día Leandro estoy adaptando tu codigo para un proyecto similar, el problema que tengo es que cuando quiero pasar los datos del grid(A) al grid(B) me sale este error
ResponderEliminar{"Rows cannot be programmatically removed unless the DataGridView is data-bound to an IBindingList that supports change notification and allows deletion."}.
Te comento que cuando obtengo los datos del grid(A)lo hago de la siguiente manera
gridempleados.DataSource = NuevaReuniondal.Obtenerempleados();
gridempleados.Columns[2].HeaderText = "Nombre";
gridempleados.Columns[3].HeaderText = "Puesto";
hola Marco
ResponderEliminarsi asignas el DataSource al grid no podras usar el Remove() directo contra el grid
sino que los datos deberia quitarlo de la lista de datos
var lista = NuevaReuniondal.Obtenerempleados();
de esa lista es donde debes remover y luego volver asignar el datasource, o sea remueves sobre el origen de datos y no sobre el control
se que existe una implementacion con el IBindingList en donde al eliminar del control impacta en la lista, pero la verdad es que nunca use esa interfaz
saludos
Hola Leandro un saludo, gracias por el aporte; tengo una inquietud cómo resolviste este problema, por que te comento que yo lo continúo teniendo: No se pueden agregar filas mediante programación a la colección de filas de DataGridView cuando el control está enlazado a datos.
ResponderEliminar, trabajo con un gestor que es el sql server cualquier ayuda es bienvenida te lo agradezco de ante mano saludos
Hola leandro, tu ejemplo esta muy bueno quise hacer lo mismo con un TruDbGrid pero es muy complejo. Mas una consulta yo enlazo el datagrid a un StoreProcedure, selecciono las filas que quiero y las paso al segundo grid que esta desconectado, mi pregunta es yo en ese storeProcedure tengo un campo vacio que quiero editar, para ser mas exacto ese StoreProceduro esta armado con dos tablas Documento, DocumentoDetalle, lo que quiero hacer es que esos campos seleccionados en grid desconectado los quiero editar, el campo vacio lo quiero llenar con un numero de documento que voy crear, apreciaria mucho alguna idea
ResponderEliminarhola Kallpa
ResponderEliminarla verda dnunca use TruDbGrid, pero si fuera similar al DataGridView podrias recorrer las rows del grid y operar con esa informacion invocando al procedure pasando los parametros
imagino ado.net conoces, no?
conoces como invocar un procedure usando usando parametro?
algo que no mencioans es que db utilizas
saludos
Hola Leandro,
ResponderEliminarUtilizo un BD en sql, en tu ejemplo utilizo mi store procedure para llenar el primero DataGridView,(Lo invoco como un BindinSource) lo que quiero hacer es editar los campos seleccionados en el segundo DataGridView, hace mucho que no programaba y estoy retomando las riendas(Casi 9 años)
hola Kallpa
ResponderEliminarcargas por medio de un procedure y el BindinSource un grid, pero el segundo como lo vinculas a los datos?
quizas debas usar el evento CellEndEdit del grid y alli lanzar la operacion de actualizacion
saludos
Hola Leandro
ResponderEliminarTengo este error
No se pudo encontrar la columna denominada IDServicioList.
Nombre del parámetro: columnName
A que se debe
Hola Leandro he revisado tu publicacion y tengo una consulta nose si me podras ayudar he tratado de adptar tu ejemplo sin exito, ya que si bien es cierto dentro de tu ejemplo veo que pasa de un datagridview de uno a otro con los botones hasta ahi todo bien pero no lo guarda en la bd para mayor detalle adjunto un ejemplo funcional de lo que necesito pero usa dataset tipeados como tu ejemplo y no manejo mucho ese tema lo hago con procedimientos almacenados y funciones, el ejemplo
ResponderEliminarhttps://www.dropbox.com/s/vbunp4wz6wnzm05/Usuarios%20y%20Permisos.rar?dl=0
me gustaria que me ayudaras con el siguiente ejemplo pero hacerlo con funciones y procedimientos almacenados, muchas gracias. Saludos cordiales
hola
EliminarPero cual seria la duda? guardarlos en la db si conoces ado.net es simplemente ejecutar INSERT
No necesitas de dataset para actualizar los datos, simplemente tomas los datos que pasas de un lado al otro y los asignas a los parametros que defines en el procedure
saludos
Hola, quiero realizar lo mismo, solo que los checkbox donde seleccionaría está en otro Form (Form1) y ademas todos los que selecciono pasarlos Form2 en un datagridview
ResponderEliminarhola
Eliminarcual seria al problema? podrias usar la tecnica de comunicar forms
Comunicar Formularios
para pasar datos de un form a otro
saludos
Hola Leandro Tuttini, es posible utilizar este código para pasar registros de un sistema a otro compartiendo la misma bd online??? P/EJ: el admin asigna una tarea al usuario 1, otra distinta al usuario 2, pero ninguno de los dos usuarios sabe que tarea tiene el otro....desde ya gracias!
ResponderEliminarHola Leandro tuttini, oye tengo un problema, lo que pasa es que implemente tu código de obtener el dato con el checkbox dentro del datagridview, pero yo no intento pasarlo a otro gridview, lo quiero pasar todos a un texbox o aun label, cuando lo intento solo me aparece el ultimo valor, te agradecería mucho tu ayuda
ResponderEliminarhola leandro ,tengo un problema estoy trabajando con listas genericas,y quiero pasar data de una grilla a otra en si dos , cuando paso d izquierda a derecha si se puede pero de derecha a izquierd me vota error ,dice que esta enlazada a datos ,espero me respoindas
ResponderEliminarhola
EliminarPero la que esta enlazada a datos es el control grid no la lista, entiendo que si has asignado el DataSource del grid con List<> haya problemas, quizas debas evaluar usar el
BindingList Class
saludos
Hola Leandro:
ResponderEliminarEstoy iniciándome con el tema de LINQ, específicamente LINQ to SQL. El problema que tengo es que no me está actualizando información en mi base de datos. Tengo el siguiente código:
dbFin700DataContext dbFin700 = new dbFin700DataContext(Settings.Default.cnxFIN700Prod);
Table tb_RutNoDicom = dbFin700.GetTable();
var consulta = from source in tb_RutNoDicom
where source.RutAceptante == "11425839-3"
select source;
Ocf_RutNoDicom fila = consulta.FirstOrDefault();
if (fila != null)
{
fila.RutAceptante = "0011425839-3";
fila.RutAlumno = "0018471656-9";
dbFin700.SubmitChanges();
}
Dónde "Settings.Default.cnxFIN700Prod" es una conexión a una base de datos real. Es decir estoy trabajando sobre datos reales en producción. el asunto es que el "SubmitChanges()" no actualiza los datos. He consultado por internet, viendo tutoriales al respecto, y aparentemente el código que te presento estaría de acuerdo con lo que he visto.
Como información adicional te puedo decir que la tabla en cuestión no tiene Primary Key. y que el registro que rescato se encuentra 2 veces en la tabla.
Ojala puedas orientarme a como solucionar esto.
Atento a tu respuesta.
OSCAR CALDERON
Hola Leandro, estoy viendo el codigo que funciona pero hay algo que no me queda claro, dtoProductos que es???? ya que no logro saber ni que representa
ResponderEliminarhola
EliminarEl dtoProductos es un dataset tipado, veras en el proyecto que hay un archivo de extension .xsd, bueno ese es el dataset que define dentro un datatable tambine tipado ya que define las columnas en diseño
saludos
excelente me sirvió gracias
ResponderEliminarhola amigo tengo tengo una duda, como hago para des habilitar las opciones de recorrer filas en un DataGridView con la tecla flecha arriba y flecha abajo..
ResponderEliminarhola
EliminarEntiendo que no se puede deshabilitar esa opcion, si podrias ver de definir el SelectionMode, pero sino haces nada con la seleccion no veo en que afecte que se recorrar las rows del grid
Quizas se podria ver si se pone el grid como readonly, pero no creo que eso efecte la seleccion, solo sera afectada la posibilidad de edicion
saludos
estoy trabajando en C#
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola Leandro, que tal; tengo una consulta que es algo parecido a este tema. Tengo un DataGridView (que contiene comboBox) que se llena con datos de la BD, una vez que obtengo los resultados, quiero agregar una nueva fila para ingresar datos en la misma grilla y me da el error: No se pueden agregar filas mediante programación a la colección de filas de DataGridView cuando el control está enlazado a datos , para agregar utilizo un botón simple de Agregar, me parece que el error me da por el combo que hay o por los datos que ya existen obtenidos desde un datasource, agradecería tu gran ayuda.
ResponderEliminarTodo es en C#
hola Leandro, quisiera hacerte una consulta, estoy creando un proyecto de formulario datagridview(c#), con (productos, cantidad, precio)y ahora insertando un botón modificar en mi datagridview y al momento de presionar necesito que me aparezca otro Form donde ahí puedo modificarlo y luego usando un botón actualizar necesito que se modifique automáticamente en el datagridview.
ResponderEliminarSoy nuevo en este campo y quiero solucionar mi problema ya que no se como empiezo a programar ese botón actualizar en mi Form que apareció ya que quiero enviar esos datos.
Gracias.