Autor
|
Tema: problema al eliminar y agregar registros d radGridView (Leído 4,847 veces)
|
SAGA-gl
Desconectado
Mensajes: 45
|
slds gente dl foro.....verán en el sig código tengo q hcer una modificación en una base d datos...primero hgo la consulta del nro de orden y m trae los datos d esa orden al radGridView....el problema es que no puedo eliminar algún renglón d ese radGrid y tampoco añadirles....m salta un error q es d solo lectura (y ya cambie la propiedad ReadOnly) y para agregar filas RadListSource necesito un constructor sin parámetros para System.Data.DataRowView....debo hcr algo en la datatable? muchas grax d antemano [/using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using Telerik.WinControls; using Telerik.WinControls.UI; namespace RegistrarOCspp2 { public partial class ModificarOCspp2 : Form { public ModificarOCspp2() { InitializeComponent(); } private SqlConnection conexion; private SqlDataAdapter adaptador; private void ModificarOCspp2_Load(object sender, EventArgs e) { // TODO: esta línea de código carga datos en la tabla 'proyectoSaludDataSet5.medicamentos1' Puede moverla o quitarla según sea necesario. this.medicamentos1TableAdapter1.Fill(this.proyectoSaludDataSet5.medicamentos1); // TODO: esta línea de código carga datos en la tabla 'proyectoSaludDataSet4.medicamentos1' Puede moverla o quitarla según sea necesario. this.medicamentos1TableAdapter.Fill(this.proyectoSaludDataSet4.medicamentos1); conexion = new SqlConnection ("Data Source=GONZALOCABRERA\\SQLEXPRESS;Initial Catalog=ProyectoSalud;Integrated Security=True"); adaptador = new SqlDataAdapter (); } private void radButton1_Click(object sender, EventArgs e) { conexion = new SqlConnection ("Data Source=GONZALOCABRERA\\SQLEXPRESS;Initial Catalog=ProyectoSalud;Integrated Security=True"); if (txtNro.Text == "") { RadMessageBox.SetThemeName("ATENCION"); DialogResult ds = RadMessageBox.Show(this, "DEBE INGRESAR UN NRO DE ORDEN", "ATENCION", MessageBoxButtons.OK, RadMessageIcon.Exclamation); this.Text = ds.ToString(); } else if (txtNro.Text != "") { conexion.Open(); SqlCommand consulta = new SqlCommand ("select Convert(varchar(10),fecIni,103) as fecIni ,Convert(Varchar(10),fecFin,103) as fecFin from ordenes where nro_orden=@nro", conexion ); consulta.Parameters.AddWithValue("@nro", Convert.ToInt32(txtNro.Text)); SqlDataReader registro = consulta.ExecuteReader(); if (registro.Read()) { rdt1.Enabled = true; rdt2.Enabled = true; txtCant.Enabled = true; txtPrecio.Enabled = true; txtProg.Enabled = true; comboMed.Enabled = true; radButton3.Enabled = true; rdt1.Text = Convert.ToString(registro["fecIni"]); rdt2.Text = Convert.ToString(registro["fecFin"]); radButton5.Enabled = true; } else { RadMessageBox.SetThemeName("ATENCION"); DialogResult ds = RadMessageBox.Show(this, "LA ORDEN INGRESADA NO SE ENCUENTRA REGISTRADA", "ATENCION", MessageBoxButtons.OK, RadMessageIcon.Exclamation); this.Text = ds.ToString(); } conexion.Close(); conexion.Open(); SqlCommand consulta2 = new SqlCommand ("SELECT dbo.DetalleOrden.medicamento, dbo.DetalleOrden.cantidad, dbo.DetalleOrden.programa, dbo.DetalleOrden.precioUnit,dbo.DetalleOrden.precioFinal FROM dbo.ordenes INNER JOIN dbo.DetalleOrden ON dbo.ordenes.nro_orden = dbo.DetalleOrden.nro_orden WHERE (dbo.ordenes.nro_orden = @nro)", conexion ); consulta2.Parameters.AddWithValue("@nro", Convert.ToInt32(txtNro.Text)); SqlDataReader registro2 = consulta2.ExecuteReader(); DataTable dt = new DataTable (); dt.Columns.Add("1"); dt.Columns.Add("2"); dt.Columns.Add("3"); dt.Columns.Add("4"); dt.Columns.Add("5"); while(registro2.Read()) { dt.Rows.Add(registro2["medicamento"], registro2["cantidad"], registro2["programa"], registro2["precioUnit"], registro2["precioFinal"]); } adaptador = new SqlDataAdapter (consulta2 ); rgv.Columns[0].FieldName = "1"; rgv.Columns[1].FieldName = "2"; rgv.Columns[2].FieldName = "3"; rgv.Columns[3].FieldName = "4"; rgv.Columns[4].FieldName = "5"; rgv.DataSource = dt.DefaultView.AsParallel(); conexion.Close(); } } private void radButton4_Click(object sender, EventArgs e) { DialogResult result = RadMessageBox.Show(this, "SEGURO QUE DESEA SALIR?", "SALIR", MessageBoxButtons.OKCancel); RadMessageBox.SetThemeName("ATENCION"); this.Text = result.ToString(); if (result == DialogResult.OK) { ConsultarOCspp2 c = new ConsultarOCspp2 (); this.Close(); } else if (result == DialogResult.Cancel) { } } private void radButton5_Click(object sender, EventArgs e) { foreach (GridViewRowInfo row in rgv.SelectedRows) { rgv.Rows.Remove(row); } } private void radButton2_Click(object sender, EventArgs e) { } private void radButton3_Click_1(object sender, EventArgs e) { if (txtCant.Text == "" || txtProg.Text == "" || txtPrecio.Text == "") { RadMessageBox.SetThemeName("ATENCION"); DialogResult ds = RadMessageBox.Show(this, "DEBE COMPLETAR TODOS LOS CAMPOS", "ATENCION", MessageBoxButtons.OK, RadMessageIcon.Exclamation); this.Text = ds.ToString(); } else if (txtCant.Text != "" || txtProg.Text != "" || txtPrecio.Text != "") { string medicamento = comboMed.Text; int cantidad = int.Parse(txtCant.Text); string programa = txtProg.Text; float precio = float.Parse(txtPrecio.Text); rgv.Rows.Add(medicamento, cantidad, programa, precio, cantidad * precio); radButton5.Enabled = true; } } } }code]
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Hay dos problemas en el código que has mostrado. El primer problema es que estás intentando modificar una secuencia paralela, que al asignarla cómo datasource es de solo lectura. ... rgv.DataSource = dt.DefaultView.AsParallel(); ...
Y el segundo problema es que estás intentando modificar dos colecciones que están sincronizadas entre sí ( RadGridView.Rows <> RadGridView.SelectedRows): ... foreach (GridViewRowInfo row in rgv.SelectedRows) ...
Solución al primer problema es no usar el paralelismo ya que tienes pensado modificar la colección. ... rgv.DataSource = dt.DefaultView ...
Solución al segundo problema es desactivar las notificaciones del control/colecciones. using (RadGridView1.DeferRefresh()) { foreach (GridViewRowInfo row in RadGridView1.SelectedRows) { RadGridView1.Rows.Remove(row); } } // El método RadGridView.DeferRefresh() internamente es lo mismo que utilizar RadGridView.BeginUpdate() + RadGridView.EndUpdate(), pero de un modo elegante.
Saludos
|
|
« Última modificación: 5 Mayo 2015, 05:37 am por Eleкtro »
|
En línea
|
|
|
|
SAGA-gl
Desconectado
Mensajes: 45
|
perdón elektro justo estaba escribiendo el post para contar q solucione el primer problema(el de añadir filas)cuando vi tu respuesta pero keria compartir el código xa ver tu opinion: private void radButton3_Click_1(object sender, EventArgs e) { if (txtCant.Text == "" || txtProg.Text == "" || txtPrecio.Text == "") { RadMessageBox.SetThemeName("ATENCION"); DialogResult ds = RadMessageBox.Show(this, "DEBE COMPLETAR TODOS LOS CAMPOS", "ATENCION", MessageBoxButtons.OK, RadMessageIcon.Exclamation); this.Text = ds.ToString(); } else if (txtCant.Text != "" || txtProg.Text != "" || txtPrecio.Text != "") { string medicamento = comboMed.Text; int cantidad = int.Parse(txtCant.Text); string programa = txtProg.Text; float precio = float.Parse(txtPrecio.Text); float precFinal = cantidad * precio; dt.Rows.Add(medicamento,cantidad,programa,precio,precFinal); rgv.DataSource = dt; radButton5.Enabled = true; }
en cuanto al segundo problema pondré en practica ahora mismo tu solución 1000000 d grax y perdón x las molestias....slds!
|
|
|
En línea
|
|
|
|
SAGA-gl
Desconectado
Mensajes: 45
|
m salio el mismo error d solo lectura.....m falta algo? private void radButton5_Click(object sender, EventArgs e) { using (rgv.DeferRefresh()) { foreach (GridViewRowInfo row in rgv.SelectedRows) { rgv.Rows.Remove(row); } } }
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Que raro. Especifica el tipo de excepción, y el mensaje exacto de error. Comprueba el valor de la propiedad dt.Rows.IsReadonly y del rgv.Rows.IsReadOnly antes de iterar la colección, ¿alguno es True? . En caso afirmativo, no se por que te sucede eso, pero para intentar solucionarlo no intentes eliminar las filas del rgv, declara el dt fuera de método y modifica el rgv.DataSource (es decir, elimina las filas directamente en el dt), los cambios se verán reflejados en el rgv. Prueba así: Dim dt As DataTable Dim dtCopy As DataTable Private Sub test() dt = New DataTable ' añadir columnas, añadir filas... dtCopy = dt.Copy() rgv.DataSource = dtCopy.DefaultView End Sub Private Sub RadButton1_Click(sender As Object, e As EventArgs) _ Handles RadButton1.Click If dtCopy.Rows.IsReadOnly() Then Throw New Exception("dtCopy row col es de solo lectura") ElseIf rgv.Rows.IsReadOnly Then Throw New Exception("rgv row col es de solo lectura") Else Using rgv.DeferRefresh() For Each row As GridViewRowInfo In rgv.SelectedRows.ToArray dtCopy.Rows.Remove(DirectCast(row.DataBoundItem, DataRowView).Row) Next row End Using End If End Sub
DataTable dt; DataTable dtCopy; private void test() { // añadir columnas, añadir filas... dtCopy = dt.Copy(); rgv.DataSource = dtCopy.DefaultView; } private void RadButton1_Click(object sender, EventArgs e) { if (dtCopy.Rows.IsReadOnly()) { throw new Exception ("dtCopy row col es de solo lectura"); } else if (rgv.Rows.IsReadOnly) { throw new Exception ("rgv row col es de solo lectura"); } else { using (rgv.DeferRefresh()) { foreach (GridViewRowInfo row in rgv.SelectedRows.ToArray) { dtCopy.Rows.Remove(((DataRowView)row.DataBoundItem).Row); } } } }
|
|
« Última modificación: 5 Mayo 2015, 07:14 am por Eleкtro »
|
En línea
|
|
|
|
SAGA-gl
Desconectado
Mensajes: 45
|
buenas noches ha funcionado a la perfeccion.........se q me vas a regañar xq va contra las reglas del foro pero MUCHISIMAS GRACIAS ELEKTRO
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
se q me vas a regañar xq va contra las reglas del foro pero MUCHISIMAS GRACIAS ELEKTRO Sería incapaz de "regañar" por ese motivo, no soy un monstruo, jaja. Es cierto que esa norma existe peeeeeeeero... es un tabú . Me alegro de que te haya servido de ayuda. PD: Eso si, intenta marcar tus temas cómo resueltos utilizando el icono de . Saludos!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Agregar carácter a registros de un campo
Bases de Datos
|
rob1104
|
3
|
7,484
|
16 Marzo 2010, 07:59 am
por rob1104
|
|
|
Cambiar nombre default que se coloca al agregar registros a windows
Programación Visual Basic
|
.:UND3R:.
|
1
|
2,507
|
18 Junio 2011, 23:03 pm
por seba123neo
|
|
|
Eliminar registros repetidos dejando 1
Bases de Datos
|
Shell Root
|
2
|
3,500
|
20 Septiembre 2013, 05:11 am
por Shell Root
|
|
|
Eliminar y reemplazar registros en Array
.NET (C#, VB.NET, ASP)
|
luis456
|
3
|
3,864
|
15 Enero 2014, 20:40 pm
por Eleкtro
|
|
|
eliminar registros con ceros
.NET (C#, VB.NET, ASP)
|
luis456
|
5
|
3,860
|
12 Noviembre 2014, 12:35 pm
por luis456
|
|