jueves, 31 de marzo de 2011

Unable to find the requested .Net Framework Data Provider. It may not be installed.

Hola.
Les dejo aquí la solución a un error que me encontré cuando subí mi aplicación web al hosting que tengo contratado en http://www.webhostingworld.net/.

Debo decir que, cuando ejecutaba mi aplicación de manera local, todo corria perfectamente, sin embargo al subir la aplicación al hosting me apareció el siguiente error:

"Unable to find the requested .Net Framework Data Provider.  It may not be installed."

¿A qué se debe?

Pues literalmente indica que el conector de base de datos que nuestra aplicación utiliza no está instalado en el hosting. Sin embargo existe la posibilidad de que sí lo esté pero que el predeterminado sea otro, por lo tanto se lanzaria el mismo error para nuestra aplicación.
Podemos en primera instancia, preguntar en nuestro hosting, que conectores de bases de datos y versiones tienen instalados para corroborar que tengan el que nosotros usamos.
Pero si ustedes, al igual que yo, usan  en su aplicación MySql, aquí les dejo la solución para que hagan la prueba antes de perder el tiempo haciendo tickets de soporte.

Basta con poner en el web.config lo siguiente:

  <system.data>
    <DbProviderFactories>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".NET Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.1.3.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D"/>
    </DbProviderFactories>
  </system.data>

En mi caso especifico, yo uso la versión 6.1.3.0 del conector mysql para .net.

Espero les sea de ayuda a  algunos. Cualquier duda escríbanme.

lunes, 28 de marzo de 2011

Editar todas las filas de un GridView a la vez.

Por default, en los controles GridView se edita una fila a la vez, para lo cual hay que agregar en cada fila un boton de edición. Pero habrá ocaciones en que, por la cantidad de información que se maneja en un grid y, por el proceso de captura en si, resulta inconveniente entrar registro por registro a modificarlo. Para estos casos, se puede implementar la edición masiva de filas de un GridView, he aquí el ejemplo de cómo hacer esto:

1.- En nuestro formulario aspx, se manejaran 2 controles, uno de tipo TextBox y otro Label, el primero es para editar y el segundo para visualizar la calificacion. El despliegue en pantalla de ambos controles debera estar controlado por lo que puede ser una variable de tipo bool, la cual indicará si su atributo "Visible" es true o false. El código del Gridview quedaría asi:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="idcalificacion" >
            <Columns>
            <asp:BoundField DataField="idcalificacion" HeaderText="ID CALIFICACION" />
            <asp:BoundField DataField="alumno" HeaderText="ALUMNO" />
            <asp:TemplateField HeaderText="CALIFICACION">
                <ItemTemplate>                           
                    <asp:TextBox ID="TextBoxCalificacion" Visible='<%# (bool) IsInEditMode %>' runat="server" Width="30" MaxLength="2" Text='<%# Bind("calificacion") %>'></asp:TextBox>
                    <asp:Label ID="Label1" runat="server" Visible='<%# !(bool) IsInEditMode %>' Text='<%# Bind("calificacion") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>                       
        </Columns>
    </asp:GridView>

En el archivo de codigo .CS, el valor de la variable bool que condiciona la visibilidad de los controles seria puesto o devuelto por la siguiente funcion:

    protected bool IsInEditMode
    {
        get { return isEditMode; }
        set { isEditMode = value; }
    }

Y el evento que modificaria el valor de esa variable, podria ser el click a un boton llamado EDITAR/GUARDAR, el cual queda de la siguiente manera:

    protected void editar_Click(object sender, EventArgs e)
    {
        if (isEditMode == false)
        {
            isEditMode = true;
        }
        else
        {
            isEditMode = false;
         }
   }

En resumen:
Inicialmente la variable isEditMode estaria en false, al dar click en el boton EDITAR/GUARDAR, esa variable invertirá su valor de false a true y viceversa, lo que llevará a visualizar o no el control TextBox o el control Label  de cada fila del GridView, todas las filas al mismo tiempo ya que todas condicionan la visibilidad de sus controles a través de la misma variable.

Espero que les haya sido de ayuda estos códigos de ejemplos. Cualquier duda, escríbanme.