none
¿ObjectDataSource de ASP.NET con DataTables o DataRows como parámetros de métodos de Negocio?

    Question

  • ¿Alguien ha conseguido usar el ObjectDataSource de ASP.NET con DataTables o DataRows como parámetros de métodos de actualización de objetos de Negocio?.

    Hay mucha gente en Internet también con este problema, pero al final no sé si es imposible o hay alguna forma posible.

    Es decir, si tienes un método de una clase de negocio que por ejemplo está así definido:

    [DataObject]

    class ClienteBll

    {

    [DataObjectMethod(DataObjectMethodType.Update, true)]

    static public int ActualizarClientes(ClienteDS.ClientesDataTable clientesDT)

    {

    ClientesTableAdapter clientesTA = new ClientesTableAdapter();

    return clientesTA.Update(clientesDT);

    }


    }

    Si configuras el ObjectDataSource de ASP.NET que en el evento Update llame a este método de negocio, da el siguiente error:

    Could not find a property named 'CustomerID' on the type specified by the DataObjectTypeName property in ObjectDataSource 'MaestroClientesObjectDataSource'

    Parece que puede ser 'por diseño' porque el ObjectDataSource requiere que sean parámetros sueltos uno por cada campo/columna del DataBinding (p.e. con un GRID), o bien un único objeto como parámetro (lo que yo quiero) pero tiene que tener una propiedad por cada campo/columna que se llamen igual... En ese caso, me valdría utilizar un DataRow en lugar de un DataTable con un solo registro, por ejemplo llamando a un método de Negocio similar al siguiente:


            [DataObjectMethod(DataObjectMethodType.Update, true)]
            public int ActualizarCliente(ClienteDS.ClienteRow custRow)
            {                       
                //Implementación de la Actualización llamando a clases DAL o TableAdapters
            }

    Pero tampoco funciona, con el DataRow da el siguiente error:

    No parameterless constructor defined for this object

    Parece que necesita un constructor sin parámetros... y el constructor del DataRow tiene parámetros...

    Si que es posible con una Clase-Entidad Custom donde te definas una propiedad por cada columna, etc., pero esto genera un overhead de trabajo en el desarrollo del que me gustaría prescindir. Me parecen mucho mas productivos los DataSets, DataTables, DataRows manejados con TableAdapters, etc.

    Si consigo este enlace de ObjectDatasource con métodos de negocio que implementan DataRows o DataTables como parámetros de entrada de sus métodos, ya lo postearé aquí. :-)

    ---

    César de la Torre
    Arquitecto de Soluciones
    [Microsoft MVP - Connected Systems]
    [MCSE] [MCT]

    Renacimiento
    Microsoft GOLD Certified Partner


     

    Thursday, June 08, 2006 8:19 AM

All replies

  • Finalmente, la nica forma de solucionar este problema de que el ObjectDataSource no soporta parmetros DataRow o DataTable es:

    ObjectDataSource  solamente soporta como parmetros de mtodos a tipos de datos simples (ok si son pocos parmetros) un objeto de una clase custom que definas, donde tenga una propiedad pblica por cada parmetro. El nombre de cada propiedad pblica de dicha clase debe coincidir con el nombre de p.e. cada columna de una GRID con la que se haya hecho el DataBinding. As se puede p.e. llamar a un mtodo de actualizacin que tenga un nico parmetro de entrada con todos los datos del registro a actualizar.
    Ver la URL en el apartado 'Passing Custom Parameter Types':
    http://msdn2.microsoft.com/en-us/library/57hkzhy5.aspx

    Luego, lo que hacemos es que 'convertimos al vuelo' dicho registro de clase-custom que nos ha llegado a un DataRow/DataTable y se lo pasamos al objeto de negocio/acceso a datos que tenamos establecido que aceptaba DataTables para actualizarlo directamente de forma'.Update(DataTable dt)'.
     
    Cesar de la Torre
    Arquitecto de Software
    [Microsoft MVP - Connected Systems]
    [MCSE] [MCT]

    Renacimiento
    Microsoft GOLD Certified Partner

    Friday, August 04, 2006 9:34 AM