• Domingo 22 de Diciembre de 2024, 12:16

Autor Tema:  Dataset  (Leído 3565 veces)

poduma

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Dataset
« en: Lunes 3 de Abril de 2006, 11:14 »
0
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

hellscream

  • Miembro activo
  • **
  • Mensajes: 95
    • Ver Perfil
Re: Dataset
« Respuesta #1 en: Lunes 3 de Abril de 2006, 15:01 »
0
Filtrado = FiltradoCopia.Copy();

poduma

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Dataset
« Respuesta #2 en: Lunes 3 de Abril de 2006, 19:00 »
0
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

hellscream

  • Miembro activo
  • **
  • Mensajes: 95
    • Ver Perfil
Re: Dataset
« Respuesta #3 en: Lunes 3 de Abril de 2006, 20:26 »
0
Cita de: "poduma"
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?)

poduma

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Dataset
« Respuesta #4 en: Lunes 3 de Abril de 2006, 22:27 »
0
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:

hellscream

  • Miembro activo
  • **
  • Mensajes: 95
    • Ver Perfil
Re: Dataset
« Respuesta #5 en: Martes 4 de Abril de 2006, 00:10 »
0
Cita de: "poduma"
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.

poduma

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Dataset
« Respuesta #6 en: Martes 4 de Abril de 2006, 20:26 »
0
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: