Ver Mensaje Individual
  #6 (permalink)  
Antiguo 16/07/2010, 14:36
Avatar de Porlachucha
Porlachucha
 
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 16 años
Puntos: 5
Respuesta: Remplazar valores a una formula creada por el usuario en vb.net

Hola Carmen.... lo que necesitas es ver la forma de "ejecutar" lo que transformaste. en el ejemplo que te di antes (sorry si esta en C#) el autor utiliza una capacidad que se denomina reflextion. con eso es posible ejecutar codigo en forma dinamica, exactamente lo que haces tu con el replace.
Mira aca tengo una funcion, que ejecuta codigo, en base a ciertos valores que obtengo de una base de datos. la idea es que con un ciclo foreach recorro el datatable y voy obteniendo el nombre de una formula. esa formula, la tengo previamente codificada en mi codigo. Con reflextion, lo que hago es ejecutar codigo en forma dinamica. Esto no es exactamente lo que necesitas, pero te puede dar una idea por donde investigar.


Código:
foreach (DataRow drVarForm in dttVariablesFormulas.Rows)
                            {
                                double dResultado;
                                string sDescripcionFormula = drVarForm["Descripcion"].ToString().Trim();
                                string sCodigoVariableFormula = drVarForm["CodigoVariable"].ToString().Trim();
                                int iCodigoVariableFormula = Convert.ToInt16(sCodigoVariableFormula);
                                string sNombreMetodo = drVarForm["NombreMetodo"].ToString().Trim();

                                // aca llamamos al metodo
                                dResultado = dCalcularQBE(sNombreMetodo);
}


        private double dCalcularQBE(string sMetodo)
        {
            try
            {

                //Namespace.NombreClase
                Type variableTipo = Type.GetType("QBE2009.QBE_Formulas");
                // Que Metodo Invocar
                MethodInfo variableInfoMetodo = variableTipo.GetMethod(sMetodo);
                // Ojo esto solo funcionara si tu constructor es static sin parametros y si tus 
                //metodos son estaticos y no requieren que instancies la clase

                object instanciaResultado = variableInfoMetodo.Invoke(null, null);
                double resultado = 0;
                if (instanciaResultado == null) 
                {
                    // esto lo hace porque no tengo otra forma de generar un NAN
                    resultado = (System.Math.Log(3 / -1));
                }
                else
                {
                    resultado = Convert.ToDouble(instanciaResultado);
                }
                return resultado;
            }
            catch (Exception ex)
            {
                return (System.Math.Log(3 / -1)); ;
            }
        }


// aca una formula que puede estar en otra clase
        static public double? dCalculaSGRAcumulado()                            
        {
            try 
            {	        
               // aca una formula que hace algo y entrega un valor de vuelta  
             }
         }
pd: sorry pero no se de la sintaxis de VB. pero es facil converytirlo

salu2
plch
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...