Hallo,
Folgendes Problem: Ich greife auf ein Wort in ner SQL Datenbank zu und setze dieses Wort in meine Webseite. Im C# Code habe ich also einen String.
Jetzt will ich aber auf dieses Wort klicken und eine C# Funktion aufrufen, welche weitere Daten aus der Datenbank zieht.
Wie muss ich also den String verändern und auf was muss dabei geachtet werden?
Geht das irgendwie mit onclick? oder a href? oder EventHandlern oder javascript:__dopostback?. Hab viel ausprobiert, aber...
Suche jedenfalls die einfachste Lösung.
Du könntest statt einem String ein LinkButton auf deiner Page erstellen und dafür das Click-Event anmelden.
Wenn Du nur den Internet-Explorer benutzt, kannst Du das über ein mit .NET erstelltes ActiveX machen. Ja das geht!!! Aber nur managed.
Dann geht nur mit dem IE.
Du kannst auch den Webbrowser in deinem Programm benutzen und die events abfangen.
Dann gehts nur über den Webbrowser in deinem Programm.
Wenn es irgendein-Browser sein soll, dann mit GetGUIThreadInfo-API das Handle des aktuellen Carets abrufen, dort den selektierten Text ermitteln (wie man die Selektion ermittelt müsste ich auch erst in Erfahrung bringen) und dann natürlich wie gehabt weitermachen. Dann ginge es für jedes Windows-Programm.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
Hallo qazeem,
Du sprichst tatsächlich von einer einfachen Html-Seite ohne serverseitigen Code? Wenn ja, dann kannst Du einen einfachen Link in Verbindung mit JavaScript verwenden. Den weiteren Weg kannst Du dann per AJAX realisieren.
Sollte es sich bei Deiner Seite doch etwas um eine aspx (also mit serverseitigen) Code handeln, dann verwendest Du einfach ein LinkButton in Verbindung mit einer OnClick Methode.
Also, das sagt mir nicht viel. Natürlich will ich es so machen, dass es mit allen Browsern funzt.
Beispiel:
Rufe aus der Datenbank folgendes Wort ab: Rechne
im C#Programm:
string Link1 = "Rechne"
// um ihn auf die Webseite zu bringen
Link1 = "<td onclick=Rechne();>" + Link1 + </td>"
zack... die Zeile wird auf die HP gebracht.
Jetzt will ich draufklicken und er soll die Funktion im C# Programm aufrufen:
private void Rechne(sender o, EventArg e);
Das funzt natürlich net. Aber so in der Art muss das doch gehen.
Oder habt ihr das richtig erklärt und ich hab das nur nicht gepeilt?
Ja es handelt sich also um eine aspx Anwendung mit serverseitigem Code.
Genau das mit dem LinkButton sollte eigentlich funktionieren.
Kannst du mir sagen, wie ich die Zeile per Hand reinsetze und ob ich noch auf etwas achten muss, damit er die Funktion im serverseitigem Code findet?
Original von qazeem
Also, das sagt mir nicht viel. Natürlich will ich es so machen, dass es mit allen Browsern funzt.
Von verschiedenen Browsers hatte ich nichts geschrieben.
Original von qazeem
Jetzt will ich draufklicken und er soll die Funktion im C# Programm aufrufen
Mir scheint Dir fehlt das grundsätzlich Verständnis in Bezug auf ASP.NET.
Du suchst das LinkButton Control.
Mehr Infos findest Du unter http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/standard/linkbutton.aspx
Bin zwar kein Profi aber das grundsätzliche Verständnis habe ich.
Das mit den Browsern und der Satz: "Das sagt mir nicht viel." war auf die Beiträge zuvor bezogen. Egal.
Ich weiss auch was ein LinkButton ist. Das Problem ist nur, dass der Code der die serverseitige Funktion aufrufen soll auch serverseitig erstellt wird. Ich kann also nicht einfach ein LinkButton hinziehen, doppelklick draufklicken und dort die Funktion LinkButton_Click() definieren.
das heisst ich muss den ASP Code selber erstellen und den Verweis auch.
Wenn man ein einfaches Beispiel mit dem LinkButton erstellt und dann den Code im WebBrowser anschaut, ist der Code verändert: die javascript:__dopostback funktion wird verwendet.
Hallo qazeem,
dann erstelle Dir das Control dynamisch. Wie man das macht, findest Du mit Hilfe der Suche.
Hallo,
ich glaube nicht dass mir die dynamische Erstellung eines LinkButtons weiterhilft, also sowas in der Art:
LinkButton eintrag = new LinkButton();
eintrag.Text = "YO";
eintrag.Click = new EventHandler(LinkButton5_Click1);
PlaceHolder1.Controls.Add(eintrag);
Mein Code sieht so aus:
private string Get_Vehicle_List(int prm_user_id)
{
string str_vehicle;
//... DATENBANKABFRAGE: Ergebnis: Array mit unbekannter Anzahl von Einträgen
if (objdb.Query_State) // Datenbankabfrage erfolgreich
{
while (objdb.Query_RS.Read()) // Einträge existieren --> Einträge verarbeiten
{
string Vehicle_KZ = objdb.Query_RS.GetValue(0).ToString();
str_vehicle += "<tr><td><asp:LinkButton runat=\"server\" OnClick=\"LinkButton_Click\">" + Vehicle_KZ + "</asp:LinkButton></td></tr>\n";
}
objdb.Query_RS.Close();
}
return str_vehicle;
}
Dieser str_vehicle wird also zurückgegeben und über einen Platzhalter oder ein Literal Werkzeug in die Seite dynamisch eingebaut.
Was für Möglichkeiten habe ich denn diese Einträge auf serverseitige Funktionen zu verlinken. Das mitdem <asp:LinkButton... OnClick ...> funktioniert nicht.
Hallo qazeem,
Original von qazeem
ich glaube nicht dass mir die dynamische Erstellung eines LinkButtons weiterhilft, also sowas in der Art:
Doch, genau das tut es. Du kannst es drehen und wenden wie Du willst, mit der von mir vorgeschlagenen Lösung kommst Du direkt zum Ziel. Mal abgesehen davon das Dein Weg nicht ganz die feine Art ist und ASP.NET grundsätzlich wiederspricht.
Hi , ich bins nochmal,...
Soll das so in der Art funktionieren
protected void Page_Load(object sender, EventArgs e)
{
int i = 0;
while(i < 5)
{
LinkButton[] link;
link[i] = new LinkButton();
link[i].Text = i.ToString();
link[i].ID = i.ToString();
link[i].Click += new EventHandler(Yeah_Click);
Literal[] lit;
lit[i].Text = "<br>";
PlaceHolder1.Controls.Add(link[i]);
PlaceHolder1.Controls.Add(lit[i]);
i++;
}
}
protected void Yeah_Click(object sender, EventArgs e)
{
Label1.Text = "Es funktioniert !!!";
}
Jedenfalls funktioniert der Code nicht. Fehler mit den Variablen link und lit.
Mein Problem: Will einfach nur im Page_Load ne Liste laden, die Einträge stammen aus einer Datenbank. Jeder Eintrag verweist auf das selbe Event mit unterschiedlichen Argumenten.
Ist das Problem so kompliziert? oder bin ich einfach zu dumm?
link und lit wurden nicht instanziert.
[FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
Hallo qazeem,
Du erstellst ein Array, initialisierst dies aber nicht. Des Weiteren hingt der Code noch an div. anderen Stellen.
Ungetestet:
for(int i = 0; i < 5;i++)
{
LinkButton lnkBtt = new LinkButton();
lnkBtt.Text = i.ToString();
lnkBtt.ID = "ID" + i;
lnkBtt.Click += new EventHandler(Yeah_Click);
Literal lit = new Literal();
lit.Text = "<br />";
PlaceHolder1.Controls.Add(lnkBtt);
PlaceHolder1.Controls.Add(lit);
}
protected void Yeah_Click(object sender, EventArgs e)
{
Label1.Text = "Es funktioniert !!!";
}
Krass. Der Code funktioniert. Das müsste mir weiterhelfen.
Mein letztes Problem: Wie übergebe ich jetzt der Funktion ein Argument, so dass er mir für jeden LinkButton folgendes ausgibt: Es funktioniert: 0, Es funktioniert: 1, usw....
Hallo qazeem,
schau Dir die Attribute OnCommand, CommandName u. CommandArgument an.
Hallo Kai,
genial das funktioniet mit den command attributen.
Jetzt will ich das ganze allerdings in eine Tabelle bauen oder in eine Liste.
Wie benutzt man das Literal Werkzeug genau. Du hast vorhin den Literal Text= <br** /**>
Damit hat der Zeilenumbruch funktioniert. Warum musste man den / hinsetzen?
Warum funktioniert das nicht:
Literal lit1 = new Literal();
lit1.Text = "<tr><td>";
Literal lit2 = new Literal();
lit2.Text = "</td></tr>";
PlaceHolder1.Controls.Add(lit1);
PlaceHolder1.Controls.Add(lnkBtt);
PlaceHolder1.Controls.Add(lit2);
Auch wenn ich den / vor die > setze, bekomme ich kein Ergebnis.
<br /> ist die XML-valide Variante des Zeilenumbruchs.
Dafür gibt es in ASP.NET das Table und das DataGrid Control. Ansonsten hilft natürlich auch immer selfhtml.org =)
Original von feadur
Dafür gibt es in ASP.NET das Table und das DataGrid Control. Ansonsten hilft natürlich auch immer selfhtml.org =)
Ich hätte es nicht besser sagen können. Schau dir am besten mal alle ASP.NET Control an: http://www.asp.net/quickstart
Danke Leute,
einen DataGrid habe ich jetzt nicht benutzt.
Aber ich glaube so sollte das funktionieren und tuts auch für das kleine Beispiel:
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
LinkButton lnkBtt = new LinkButton();
lnkBtt.Text = i.ToString();
lnkBtt.ID = "ID" + i;
lnkBtt.Command += new CommandEventHandler(Yeah_Click);
lnkBtt.CommandName = "sido";
lnkBtt.CommandArgument = i.ToString();
tc.Controls.Add(lnkBtt);
tr.Cells.Add(tc);
PlaceHolder1.Controls.Add(tr);
}
}
protected void Yeah_Click(object sender, CommandEventArgs e)
{
if (e.CommandName == "sido")
{
Label1.Text = e.CommandArgument.ToString();
Label1.Text += "Es funktioniert !!!";
}
}
Kai, der Link vom Quickstart ist genial für mich. Ist mein Programm so in Ordnung, oder sollte ich lieber HtmlTable verwenden, was ist der Unterschied?