Mehrere Events mit dem Selben Handler und dem Selben Background Code namen im Placeholder

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Mehrere Events mit dem Selben Handler und dem Selben Background Code namen im Placeholder

    Hallo und guten Abend
    Ich habe ein "großes" Problem.

    Ich möchte mehrere Events auf einen Butten legen, der dann dynamisch vervielfacht wird.

    Hier mein Code:



    VB.NET-Quellcode

    1. Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
    2. Dim PageVerse() As String
    3. Dim strSql As String = "use bible select * from t_asv"
    4. Dim dtb As New DataTable
    5. Using cnn As New SqlConnection("Server=localhost\SQLEXPRESS;Database=bible;User Id=Sys_Bible;Password=SystemBible123;")
    6. 'Achtung der SQL Server ist auf meinem Home PC also keine Chance meine Datenbank zu manipulieren. :D
    7. cnn.Open()
    8. Using dad As New SqlDataAdapter(strSql, cnn)
    9. dad.Fill(dtb)
    10. End Using
    11. cnn.Close()
    12. End Using
    13. Dim TextVerse As [String]() = Array.ConvertAll(Of DataRow, [String])(dtb.[Select](), Function(row As DataRow) DirectCast(row("bible_Text"), [String]))
    14. Dim count As Integer = 0
    15. For Each Text As String In TextVerse
    16. Dim testLabel = New LinkButton()
    17. testLabel.ID = "btn_" + count.ToString
    18. testLabel.Text = Text
    19. testLabel.CssClass() = "basic.css"
    20. AddHandler testLabel.Click, AddressOf dynText_Click
    21. PlaceHolder1.Controls.Add(testLabel)
    22. Dim labeltest As New Label
    23. labeltest.Text = "<div class='page' id='pageTag'><div>nocheinmal text</div><div>// und noch einmal</div>" + Text + "</div>"
    24. PlaceHolder1.Controls.Add(labeltest)
    25. count += 1
    26. Next Text
    27. RadTextBox1.Text += "-"
    28. End Sub
    29. Private Sub dynText_Click(sender As Object, e As EventArgs)
    30. Label1.Text = "ok post back geht"
    31. RadButton1_Click(sender, e)
    32. End Sub


    Hoffe Ihr könnt mir einige Tipps geben.
    Schönen Abend
    Noel Schenk

    Edit: Ach ja und momentan passiert nichts
    Von Buttons dynamisch generieren täte ich abraten.
    Eine sauberere Lösung wäre, wenn du ein typisiertes Dataset erstellst, und daran ein Datagridview bindest mit mw. einer DatagridviewButtonColumn.
    Dann hast du auch sowas wie viele Buttons, aber trotzdem noch eine wartbare Datenverarbeitung.

    Aber das wäre ein komplett anderer Ansatz - also bei Interesse guck einfach mal
    vier Views-Videos an, vlt. kriegst du bischen Feeling, wie Ado.Net so gedacht ist.

    Und wenn deine Db nicht allzu riesig ist, kannst du sie getrost auch weglassen, und das Dataset direkt auf Platte speichern.

    Naja - üblicherweise lässt man sich von mir erst überzeugen, wenn man garnimmer weiter kommt, und soweit bist du glaub noch nicht.
    Also es passiert nix - hast du mal einen Haltepunkt gesetzt, und bist im Einzelschritt durchgegangen, welcher Code überhaupt ausgeführt wird?
    Zu deinem ersten Vorschlag: Die Butten werden als normalen Text ausgegeben und dann mit viel Javascript ausgelesen. Dabei müssen allerdings mehrere Div s ineinander verschachtelt werden.
    Und zum Zweiten. Ja ich habe es bereits schritt für schritt angeschaut und zur Laufzeit debugt. Leider hat nicht funktioniert. Nicht einmal das letzte Element.
    was bedeutet "wechselt zu einer dropdownBox"?
    (In .net heissen diese Controls übrigens Combobox (obwohl DropDownbox ein besserer Name wäre)).
    Jedenfalls üblicherweise sind in einer Combo bereits von vornherein alle Werte drinne, und "wechseln" könnte würde dann bedeuten, dass ein annerer Wert der Combo ausgewählt wird.

    Falls dir sowas vorschwebt empfehle ich dir umso dringender, auf den anderen Ansatz umzuschwenken, denn wenn du sowas selbst codest, dann erfindest du Databinding neu, und das ist keine gute Idee, weils das schon gibt, und in einer Qualität und Leistungsfähigkeit, die ein selbstgebasteltes Databinding nie wird erreichen können.
    also was ich jetzt verstehe ist, du hast einen Text, und der wird zunächst auf einem Label dargestellt.
    Beim Hovern verschwindet das Label und wird durch eine Combo ersetzt - die denselben Text anzeigt, und wenn man auf die Combo klickst, dann verschwindet die Combo, und der Text soll nun in einer Textbox angezeigt wern.
    Und wenn man daneben klickst, dann wird derselbe Text noch mal anners präsentiert - nämlich in einer MultiColumnCombo.

    Beachte, dass ich Daten und Controls voneinander unterscheide. Der Text ist Daten-Wert, und Controls präsentieren ihn.

    Wie lang ist der Text - in deim Code steht was von "bible" - das kann ja bisserl länger wern ;)
    ok, also ist mir überaus eigenartig, was du da machen willst mit dem ständigen Herumgewechsel der Controls.
    Und ich sehe auch keinen Zusammenhang mit dem von dir gezeigten Code.

    Also in deim Code das Problem ist, dass folgende Schleife ganz richtig betreten, und vielfach durchlaufen wird, aber auf dem Form zeigt sich keine Veränderung?

    VB.NET-Quellcode

    1. Dim count As Integer = 0
    2. For Each Text As String In TextVerse
    3. Dim testLabel = New LinkButton()
    4. testLabel.ID = "btn_" + count.ToString
    5. testLabel.Text = Text
    6. testLabel.CssClass() = "basic.css"
    7. AddHandler testLabel.Click, AddressOf dynText_Click
    8. PlaceHolder1.Controls.Add(testLabel)
    9. Dim labeltest As New Label
    10. labeltest.Text = "<div class='page' id='pageTag'><div>nocheinmal text</div><div>// und noch einmal</div>" + Text + "</div>"
    11. PlaceHolder1.Controls.Add(labeltest)
    12. count += 1
    13. Next Text
    Müsste vom Prinzip her eiglich gehen, nur dass nicht ein Control verwendet wird, was mir bekannt wäre.
    Ist das Telerik, Asp oder Silverlight, oder was ist das?

    noelelias schrieb:

    ich würd ja gerne n screen shot
    nur kann ich leider mein Betriebssystem nicht bedienen. :/
    Nutze den Button Druck auf Deiner Tastatur und dann ein Programm wie Paint oder IrfanView, mit dem Du den Inhalt der Zwischenablage als Bild speichern jkannst..
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Leider hab ich mir jetzt nicht das ganze durchgelesen, scheint aber in Richtung zu gehen, wie man es anders machen kann... In diese Diskusion wollte ich mich nicht einsteigern.

    Was ich sagen kann, ist es du kannst beliebig viele Events auf ein Button legen. Es muss nur in Kode zusätzlich generiert werden: Button.Click += ...

    eigentlich wenn du nach Button.Click ein += stellst, drück zwei mal Tab, dann erstellt er dir das schon. Du kannst sogar ein Temp Button erstellen, mit dem du ganz genau sagen kannst, welcher der Buttons gedrückt worden ist...

    Dachte stelle auch mal wat in den Raum...