PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ASP.net, C#] sqldatasource delete/updatecommand


Hardwaretoaster
2009-07-07, 21:11:55
Ich habe hier eine neue Aufgabe, die soll in ASP gemacht werden, ein kleines Tool zur DB-Bearbeitung.

Wenn ich eine Datagrid nehme und das mit einer sqldatasource verbinde, select-, insert-, delete- etc. command vorbelege (über diese Objektinspektorähnliche Teil) ist das kein Problem.

Ich möchte aber in Abhängigkeit von Rechten eine dropdownliste anbieten, wo die möglichen Tabellen angezeigt werden. Wenn ich aber dann dynamisch in sqldatasourceX.deletecommand den passenden SQL-String reinschreibe und dann den Autodelete-Button nutzen möchte, funktioniert das nicht, es kommt ein Fehler, dass der deletecommand nicht belegt wäre.

Mir ist ASP allgemein neu. Was übersehe ich??
Danke!

Gast
2009-07-07, 21:48:27
Ich habe hier eine neue Aufgabe, die soll in ASP gemacht werden, ein kleines Tool zur DB-Bearbeitung.

Wenn ich eine Datagrid nehme und das mit einer sqldatasource verbinde, select-, insert-, delete- etc. command vorbelege (über diese Objektinspektorähnliche Teil) ist das kein Problem.

Ich möchte aber in Abhängigkeit von Rechten eine dropdownliste anbieten, wo die möglichen Tabellen angezeigt werden. Wenn ich aber dann dynamisch in sqldatasourceX.deletecommand den passenden SQL-String reinschreibe und dann den Autodelete-Button nutzen möchte, funktioniert das nicht, es kommt ein Fehler, dass der deletecommand nicht belegt wäre.

Mir ist ASP allgemein neu. Was übersehe ich??
Danke!

Da musst du schon genauen Code posten. IMO hängst du da am besten einen Eventhandler an das Deleting Ereignis der SqlDataSource. Da kannst du dann den CommandText manuell abändern. Und vergiss nicht den CommandType zu definieren, das wäre bei dir dann sicher CommandType.Text.

Hardwaretoaster
2009-07-07, 22:39:55
So bin ich vorgegangen. CommandType habe ich aber nicht nochmal eingestellt, der ist ja eigentlich voreingestellt.
Code wäre eine Idee, der ist aber gerade nicht auf dem Rechner, muss ich morgen dran denken.
Gibt's da sonst noch was, was man beachten sollte, was bei der Komponente speziell ist?

Matrix316
2009-07-08, 08:27:53
Also ich binde ne Datenbank fast immer über den Code Behind an ein DataGrid (oder Gridview). Das finde ich etwas übersichtlicher und kanns besser nachvollziehen was er da macht.

Also quasi:
DataGrid1.DataSource = DataSet1;
DataGrid1.DataBind();

Ansonsten versteh ich noch net genau, was du überhaupt damit machen willst. ;)

Gast
2009-07-08, 09:04:37
Also ich binde ne Datenbank fast immer über den Code Behind an ein DataGrid (oder Gridview). Das finde ich etwas übersichtlicher und kanns besser nachvollziehen was er da macht.

Also quasi:
DataGrid1.DataSource = DataSet1;
DataGrid1.DataBind();

Ansonsten versteh ich noch net genau, was du überhaupt damit machen willst. ;)


Die Daten Controls wie GridView usw. implementieren Schnittstellen für SELECT/INSERT/UPDATE/DELETE. Er hat nun deklarativ eine SqlDataSource erstellt und möchte aber den Delete Sql String dynamisch setzen. Das geht auf jeden Fall problemlos, er hat da wohl nur irgend einen kleinen Fehler. Deswegen sollte er mal den genauen Code posten.

Gast
2009-07-08, 09:07:51
Schau mal hier: http://www.4guysfromrolla.com/articles/062007-1.aspx

Hardwaretoaster
2009-07-08, 23:15:19
Die Daten Controls wie GridView usw. implementieren Schnittstellen für SELECT/INSERT/UPDATE/DELETE. Er hat nun deklarativ eine SqlDataSource erstellt und möchte aber den Delete Sql String dynamisch setzen. Das geht auf jeden Fall problemlos, er hat da wohl nur irgend einen kleinen Fehler. Deswegen sollte er mal den genauen Code posten.

Wie es ausschaut, habe ich bloß das setzen zu spät gemacht, jetzt mache ich es schon im Deleting-Event des Grid, bevor es zur DataSource kommt, dann geht es.

Jetzt bin ich an einer dynamischen Anzahl an textboxen für einen Insert:
Wenn ich ein Array definiere:
private static TextBox[] insertBoxes;
und das erstelle:
insertBoxes = new TextBox[names.Length];
for (int i = 0; i < names.Length; i++)
{

insertBoxes[i] = new TextBox();
insertBoxes[i].ID = names[i];
insertBoxes[i].Style["Position"] = "relative";
form1.Controls.Add(insertBoxes[i]);
}

dann kommt nach einem Postback über insertBoxes[i].Text
nichts zurück. Wenn ich eine Box deklarativ im Designer erstelle ich das selbe (jeweils über ein ButtonClick) mache, dann geht es.
Wo sind da die üblichen Fallstricke?

Danke übringes für den Link, werde morgen mal genauer lesen.

Hardwaretoaster
2009-07-09, 20:20:36
Das ging dann, als ich es schon nach dem page_load-Event gemacht habe. Weil das wohl vor dem laden des viewState liegt. Muss einem auch einer sagen...

Matrix316
2009-07-09, 20:44:54
Ich verstehe zwar dein letztes Posting nicht ;), aber bei dynamischen Sachen muss man aufpassen, da nach eine Postback alles weg sein kann.

Hardwaretoaster
2009-07-09, 22:09:22
Ich verstehe zwar dein letztes Posting nicht ;), aber bei dynamischen Sachen muss man aufpassen, da nach eine Postback alles weg sein kann.
Ähm ja, genau darum ging's;) Damit habe ich zunächst gekämpft, bis ich dann einen etwas länglichen Artikel gefunden habe, der sich über den Lebenszyklus auslässt. Bin ich noch lange kein Experte, aber ich komme meinem Ziel näher...