So binden Sie eine Gridview von einer statischen WebMethod

So binden Sie eine Gridview von einer statischen WebMethod

Du kannst nicht machen was du willst.

Sie missverstehen den Unterschied zwischen statisch und Instanz. Beispielsweise kann Ihre Seite von Hunderten verschiedener Personen verwendet werden. Jeder Person wird eine andere Instanz Ihrer Seite bereitgestellt, und jede Person sieht eine andere Instanz von GridView. Da Ihre Webmethode andererseits statisch ist, wird ALLEN diesen Hunderten von verschiedenen Personen EINE Methode angeboten.

Wie kann Ihre statische Methode dann entscheiden, welche bedient werden soll? Es kann nicht.

Wenn Sie die Rasteransicht aus Ajax füllen möchten, müssen Sie Daten von Ihrer WebMethod zurücksenden, siehe ein Beispiel hier.

Lesen Sie den folgenden Artikel, um mehr darüber zu erfahren, warum WebMethod statisch sind.


Wenn Sie eine statische Methode verwenden, können Sie kein Steuerelement von page verwenden, da sie zu einer Klasse einer Seite gehören, die keinen statischen Bereich hat. In der statischen Methode dürfen Sie nur statische Daten, Steuerelemente usw. verwenden. Die mögliche Lösung besteht darin, dass Sie eine neue Instanz Ihrer übergeordneten Klasse erstellen müssen, dh die Seitenklasse in der statischen Methode, und anschließend können Sie auf die gesamte Steuerung der Seite dieser Instanz zugreifen. so...

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

aber der angegebene Weg funktioniert nicht, wenn Sie Daten zurückbehalten möchten, da die Instanz neu sein wird, so dass alte Daten geleert werden.


Sie können den reference passieren von Gridview auf static method und binden Sie die Girdview.

Wenn Sie eine new machen Instanz von class und die statische Methode aufrufen, wird es create new form und all controls wird created sein dafür specific instance also die gridview auf original form wird nie besiedelt.

Hier ist ein Beispiel, wie Sie Referenz und Bindgridview übergeben können.

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