SoloCodigo
CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: poduma en Lunes 3 de Abril de 2006, 11:14
-
Hola tengo una pregunta sobre datasets :unsure:
Tengo en un dataSet dos tablas: Filtrado y FiltradoCopia
En un momento dado, hago una llamada a ResetearFiltrado(), que elimina todas las filas en Filtrado y copia fila a fila el contenido de FiltradoCopia a Filtrado.
Pero mi pregunta es: Como tienen igual estructura, campos etc, no hay alguna instruccion para copiar todas las filas en Filtrado sin tener que recorrer toda la tabla FiltradoCopia ¿? :blink:
Una ayudita please ;)
Saludos y gracias
-
Filtrado = FiltradoCopia.Copy();
-
No me funciona.
Yo hago:
if (DataSet.Tables.Contains ("Filtrado")) //borramos las filas de Filtrado
DataSet.Tables["Filtrado"].Rows.Clear();
//copiamos filas de FiltradoCopia --a--> Filtrado
DataTable copia = DataSet.Tables["Filtrado"];
copia = DataSet.Tables["FiltradoCopia"].Copy();
Aparentemente lo hace, pero si despues quiero saber el num de filas de Filtrado, o acceder a una fila, col o casilla concreta, me da esta excepcion (como si no existieran las filas en la tabla). pej
string id = DataSet.Tables["Filtrado"].Rows[0].ToString(); da la excepcion:
La coleccion de estilos para las tablas de la cuadricula de datos ya contiene un estilo de tabla con el mismo nombre de asignacion
Nombre del parametro: tabla
Referencia a objeto no establecida como instancia de un objeto
-
No me funciona.
Yo hago:
if (DataSet.Tables.Contains ("Filtrado")) //borramos las filas de Filtrado
DataSet.Tables["Filtrado"].Rows.Clear();
//copiamos filas de FiltradoCopia --a--> Filtrado
DataTable copia = DataSet.Tables["Filtrado"];
copia = DataSet.Tables["FiltradoCopia"].Copy();
Aparentemente lo hace, pero si despues quiero saber el num de filas de Filtrado, o acceder a una fila, col o casilla concreta, me da esta excepcion (como si no existieran las filas en la tabla). pej
string id = DataSet.Tables["Filtrado"].Rows[0].ToString(); da la excepcion:
La coleccion de estilos para las tablas de la cuadricula de datos ya contiene un estilo de tabla con el mismo nombre de asignacion
Nombre del parametro: tabla
Referencia a objeto no establecida como instancia de un objeto
Me parece que el error está por otro lado y no en el código que muestras (si no me equivoco estás usando DataGridTableStyle no?)
-
si, pero los tablestyles no son estilos que se agregan a un datagrid para ver una tabla de manera personalizada??
Yo pensaba que los tablestyles no le influian a las tablas, solo a los grids.
Que tengo que borrar el Tablestyle que tenga el grid (relacionado con esa tabla), hacer la copia de los datos de una tabla en otra y despues volver a darle estilo al Grid ¿?
Gracias. :comp:
-
si, pero los tablestyles no son estilos que se agregan a un datagrid para ver una tabla de manera personalizada??
Yo pensaba que los tablestyles no le influian a las tablas, solo a los grids.
Que tengo que borrar el Tablestyle que tenga el grid (relacionado con esa tabla), hacer la copia de los datos de una tabla en otra y despues volver a darle estilo al Grid ¿?
Gracias. :comp:
Estoy casi seguro de que el error va al querer agregar nuevamente los *tablestyles*, tienes 2 opciones, una es arreglar tu rutina para que no intente agregar nuevamente los *tablestyles*; la otra es hacer NombreDataGrid.TableStyles.Clear(); al inicio de esa rutina y olvidarte del problema.
-
Gracias hellscream !!. Era por eso :angry: . Al final, necesitaba no solo hacer una copia de las filas de Filtrado en FiltradoCopia si esta ultima ya existe, sino crearla si no existe, en el momento que necesito hacer una copia de Filtrado. (ya que FiltradoCopia solamente tiene sentido crearla en el momento que necesite hacer la copia de seguridad de Filtrado, NO antes). (Si usaba .Copy() al ya existir la tabla FiltradoCopia en el Dataset, al intentar agregarla de nuevo me daba una excepcion, incluso si la borraba del DataSet antes de usar .Copy()).
Dejo el codigo del metodo por si a alguien le hace falta, espero que pueda usarlo quien esté interesado. Se que puede haber mejores soluciones pero funciona bien y no hay que hacer accesos a la BD, que era lo que yo quería evitar. (Si alguien sabe una solucion mejor al codigo que pongo ahora que lo suba asi igual le sirve a alguien).
El metodo ResetearFiltrado() por el que pregunte inicialmente, se llamará una vez que deseamos Restaurar Filtrado con las filas que tenia al hacer la copia. En ese metodo, unicamente habría que:
1) Eliminar todas las filas de Filtrado
DataSet.Tables["Filtrado"].Rows.Clear();
2) Importar las filas de FiltradoCopia a Filtrado
int numFilas = DataSet.Tables["FiltradoCopia"].Rows.Count;
for (int i = 0; i < numFilas; i++){
DataSet.Tables["Filtrado"]. ImportRow(DataSet.Tables["FiltradoCopia"]. Rows);
}//for
:P (aqui pongo cuando se hace la copia de seguridad de Filtrado)
private void CrearCopiaFiltrado(){
// SI FiltradoCopia YA EXISTE
if (DataSet.Tables.Contains("FiltradoCopia")){
// 1º) Borramos las filas que tenga
DataSet.Tables["FiltradoCopia"].Rows.Clear();
//2º) 'Importamos' las filas de Filtrado a FiltradoCopia
int numFilas = DataSet.Tables["Filtrado"].Rows.Count;
for (int i = 0; i < numFilas; i++){
DataSet.Tables["FiltradoCopia"]. ImportRow(DataSet.Tables["Filtrado"]. Rows);
}//for
}//if
else { // SI LA TABLA NO EXISTE
// 1º) Borramos los Tablestyles que tenga dataGridCli (cuyo DataMember es Filtrado)
dataGridCli.TableStyles.Clear();
// 2º) Hacemos una copia de Filtrado y copiamos su estruct y datos
DataTable copia = DataSet.Tables["Filtrado"];
copia = DataSet.Tables["Filtrado"].Copy();
//3º) le cambiamos el nombre antes de guardarla
copia.TableName = "FiltradoCopia";
//4º) la guardamos en el DataSet
DataSet.Tables.Add(copia);
// 5º) Agregamos de nuevo los TableStyles a DataGridCli
FormatoDataGridCli();
}//else
}//Crear
PD: Hellscream, gracias de nuevo :lol: