Ich bin mir nicht sicher, aber bielleicht wird der DataGridView nach der Zuweisung des neuen DataSet einfach nicht neu gezeichnet. Dann könnte ein dgv.Invalidate() helfen.
Das ist immer dann so, wenn Du eine Variable nicht zusammen mit der Deklaration initialisieren kannst. Wenn Du also im gleichen Aufruf deklarierst und zuweist, geht das auch bei Arrays:
int[] test = new int[]{1,2,3,4};
Wenn die Zuweisung erst nach der Deklaration erfolgt, muss es in einer Methode geschehen.
Sowas geht. Dazu muss auf dem Server, auf dem der IIS läuft, der RemoteDebugger installiert werden und laufen, ist mit auf der VS2005 CD. Dann kannst Du über das Debug-Menü von Deinem PC aus Dich auf den Server verbinden. Mehr dazu unter "RemoteDebugger" im Google.
lock(var){...} ist eine Blockanweisung, wenn die geschweifte Klammer geschlossen wird, ist die Variable wieder frei. Ein "unlock" gibts meines Wissens nicht.
Ich würde das so machen:
Das Interface IRotatableAds
public AdType Type
{
get;
}
void BuildNewAd(RotateAds myControl);
Die Implementierung von BuildNewAd erfolgt dann in den DataSet-Klassen und kann die Funktion von GetNewAd() mit der zum jeweiligen DataSet passenden Formatierung der übergebenen Control kombinieren.
Die DataSets müssen in der Implementierung der Property "Type" den jeweils passenden Typ zurückliefern.
Dann kannst Du eine Liste aller DataSets erstellen (evtl. static), und zwar als IRotatableAds, also wie folgt:
public static List<IRotatableAds> adsList;
Dieser Liste fügst Du die DataSets durch AdsList.Add(dataSet) an.
Dann kannst Du schließlich in deiner Control folgendes tun:
In der Global.asax kannst du einen Handler für das Ereignis HttpApplication.PostRequestHandlerExecute schreiben. Google hierzu mal nach "global.asax" und "PostRequestHandlerExecute". Da müsstest du dann irgendwie auf die gerenderte Page zugreifen können - notfalls über den Response-Stream.
Wenn das alles auf einem IIS läuft, kannst du so vorgehen, wie ich oben gepostet habe. Der asp.net-Prozess stellt dem Webservice die Appliation-Collection zur Verfügung. So eine Collection gibts einmal für jeden Webservice im IIS. Da der asp-Prozess weiterlebt und nicht beendet wird ausser wenn Du den IIS beendest, ist diese Collection dann quasi für alle Threads statisch.
Andersrum gesagt: Es werden zwar 2 Instanzen des Webservice erdtellt, diese laufen aber im selben Prozesss. Dies ist der ASP-Prozess (aspwp.exe), der weiterlebt un damit Applikationsdaten für den gesamten Webservice halten kann.
Wenns mehrere Server gibt, kann man einen zentralen Webservice zur Verfügung stellen, der nichts anderes als mein Beispiel von oben tut und dann "selector" per WebMethod zurückgibt. An den können sich dann die verteilten Server wenden
Wie meinst Du das mit der neuen Instanz?
Wenn es sich um einen ASP.NET Webservice handelt, laufen die alle unter dem aspnet-workerprozess, und der wird nicht beendet. Dann reicht dir ein statischer Member in deiner Webservice-Klasse oder ein Eintrag in der Application[]-Collection. Im Konstruktor kannst Du dann diesen dann durch lock() threadsafe für weitere Auswertungen puffern.