Cómo vincular una vista de cuadrícula desde un WebMethod estático

Cómo vincular una vista de cuadrícula desde un WebMethod estático

No puedes hacer lo que quieres.

Estás malinterpretando la diferencia entre estática e instancia. Por ejemplo, su página puede ser utilizada por cientos de personas diferentes. Cada persona recibirá una instancia diferente de su página y cada persona verá una instancia diferente de GridView. Por otro lado, dado que su WebMethod es estático, TODOS estos cientos de personas diferentes recibirán UN método.

Entonces, ¿cómo puede su método estático decidir cuál servir? no puede

Si desea completar la vista de cuadrícula desde ajax, debe enviar datos desde su WebMethod, vea un ejemplo aquí.

Lea el siguiente artículo para obtener más información Por qué WebMethod es estático.


si va a utilizar el método estático, no podrá utilizar ningún control de la página, ya que pertenecen a una clase de una página que no tiene un alcance estático. en el método estático, solo puede usar datos estáticos, control, etc. La posible solución es que tendrá que crear una nueva instancia de su clase principal, es decir, Clase de página en el método estático y luego podrá acceder a todo el control de la página esa instancia. así..

public static <ReturnType> MethodName
{
Class instance=new Class();
instance.GridView.DataSource=ds;
instance.GridView.DataBind();
}

pero la forma dada no funciona si desea retener los datos, ya que la instancia será nueva, por lo que los datos antiguos se eliminarán.


Puedes pasar el reference de gridview al static method y vincular la vista de viga.

Si haces un new instancia del class y llame al método estático create new form y all controls será created por eso specific instance entonces el gridview en original form nunca será poblada.

Aquí hay un ejemplo de cómo puede pasar referencia y bindgridview.

protected void Page_Load(object sender, EventArgs e)
{
   GridView grd = grdTest; //grdTest is Id of gridview
   BindGrid(grd);

}
public static void BindGrid(GridView grd)
{
  using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
  {
    SqlCommand cmd = new SqlCommand("select* from testtable", con);
    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    grd.DataSource = dt;
    grd.DataBind();
  }
}

No