Checkbox benennen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Morlock.

    Checkbox benennen

    Hallo Forum,
    stehe wieder vor einem Problem, kann mir hier bitte jemand weiter helfen.
    Ich möchte bei mehreren Checkboxen die Text-Eigenschaft von einem Dataset zuweisen.

    Ich habe in einem DataSet mehrere Typen und Bereiche (Screen 1 des DataSets)

    welche ich nach einem bestimmen Kriterium (Screen 2 des DataSets) auswähle.

    Mein aktualisiertes Dataset hat also dann den Inhalt von Screen 2
    Soweit funktioniert dies auch.

    Doch wie weise ich den Checkboxen nun die Text-Eigenschaften der Spalte "Typ" zu.

    Bei einer ListBox habe ich es so gemacht. Doch wie mache ich es bei Checkboxen

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. Me.ListBox1.DataSource = Me.GetDataSource()
    3. Me.ListBox1.DisplayMember = "Typ"
    4. Me.ListBox1.ValueMember = "ID"
    5. End Sub
    6. Private Function GetDataSource() As DataTable
    7. Dim conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Datenbank)
    8. Dim daTyp As OleDbDataAdapter
    9. Dim ds As DataSet
    10. Dim sql As String = "SELECT * FROM Typen WHERE Bereich=" & Bereich
    11. daTyp = New OleDbDataAdapter(sql, conn)
    12. ds = New DataSet
    13. daTyp.Fill(ds)
    14. Return ds.Tables(0)
    15. End Function


    Info:
    Mein Formular hat 10 Checkboxen, welche jede eine andere Text-Eigenschaft aus dem DataSet erhalten soll

    Wenn das Dataset nur 3 Datensätze enthält sollen auch nur 3 Checkboxen angezeigt werden
    Hat das aktualisierte Dataset mehr sollen diese angezeigt werden

    Im Voraus Herzlichen Dank

    Gruß Rudi
    Bilder
    • Screen 1.png

      5,27 kB, 429×262, 137 mal angesehen
    • Screen 2.png

      3,76 kB, 432×183, 122 mal angesehen
    @Morlock In welcher Form liegen denn die CheckBoxen vor bzw. sollen sie vorliegen?
    als DGV-Spalte vom Typ DataGridViewCheckBoxColumn?
    • als DataSet-Spalte vom Typ Boolean?
    • als CheckedListBox-Item?
    Letztere haben eine Checked- und eine Text-Property, die beiden ersten haben nur eine Checked-Property. Bei diesen müsstest Du eine separate ReadOnly Text-Spalte hinzufügen.
    Was soll dargestellt werden {Text, CheckBox}?
    Wie sollen Checked-Änderungen dargestellt werden {Standard-CheckBox, eigene Bitmaps}?
    Soll es ein CheckChange-Event geben?
    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!
    Hat er doch gesagt: Er hat 10 Checkboxen auffm Form, die aber nicht alle sichtbar sein sollen, sondern nur, wenn auch so viele Datensätze da sind. Mehr als 10 Datensätze sind wohl nicht vorgesehen, und von CheckedChanged-Events hatter auch nix gesagt.

    Ich tät sagen: Der Ansatz taugt nicht viel.
    wieder mal wird auf eine Db zugegriffen, bevor überhaupt ein Konzept von Datenmodell besteht.
    Mit der Folge, dass endlos in Controls herumgewurstelt wird, statt erstmal die Vorraussetzungen von Datenverarbeitung zu erlernen.

    Die konkrete Antwort auf die Frage wäre eine Grauenhaftigkeit wie diese:

    VB.NET-Quellcode

    1. dim tb=directcast(listbox1.DataSource, DataTable)
    2. if tb.rows.count>0 then
    3. Checkbox1.Text=tb.rows(0)("typ").Tostring
    4. Checkbox1.Visible=true
    5. else
    6. Checkbox1.Visible=false
    7. end if
    8. if tb.rows.count>1 then
    9. Checkbox2.Text=tb.rows(1)("typ").Tostring
    10. Checkbox2.Visible=true
    11. else
    12. Checkbox2.Visible=false
    13. end if
    14. '...
    und das für jede Checkbox - viel Spass damit ;)

    @TE: sorry für meine klaren Worte - falls du interesse hast, Datenverarbeitung nach leidlich Stand der Technik zu lernen, sag bescheid.
    @ErfinderDesRades
    Du hast Recht, wahrscheinlich der falsche Ansatz um 08/15 Checkboxen zu beschriften. :|

    Mein Gedanke war der folgende,
    da ich die CheckBoxen einzeln auf einer Form, sowie ein DataSet auch schon zu verfügen habe, unter anderem mit der Table "Typen",
    wollte ich diese dafür nutzen um die checkBox.text Eigenschaft dynamisch zu setzen.

    Hinzu kommt natürlich noch das CheckedChanged-Ereignis

    Da nur eine Box aktiviert werden darf, habe ich das seither so gemacht.

    VB.NET-Quellcode

    1. Dim chkAkt As CheckBox = CType(sender, CheckBox)
    2. Dim chkWechsel As CheckBox
    3. If chkAkt.Checked = True Then
    4. For Each Contr As Control In Me.GroupBox4.Controls
    5. If TypeOf Contr Is CheckBox Then
    6. chkWechsel = CType(Contr, CheckBox)
    7. If chkWechsel.Name <> chkAkt.Name Then _
    8. chkWechsel.Checked = False
    9. End If
    10. Next
    11. End If

    Wie würdest Du diese Aufgabe lösen wollen. Kannst Du es mir bitte deuten.
    Oder hättest Du eine ganz andere Vorgehensweise um dies zu lösen. ?(
    zunächstmal täte ich das Datenbank-Gedöhns rauswerfen - ich denke nicht, dass man für 10 Datensätze eine Datenbank braucht.
    Dann würde ich ein typisiertes Dataset nehmen.
    Dann würde ich Databinding anwenden.

    Und auch erstmal konzeptionell überlegen: sind Checkboxen eiglich das richtige?
    Wenn eh nur eine angewählt sein darf - ist dann eine Listbox nicht viel angemessener?

    Was soll eiglich passieren, wenn ein Datensatz angewählt wird? Womöglich schwebt dir nichts anderes vor als ein ParentChild-View. Das ist ein Datenverarbeitungs-Standard-Fall - wie gesagt: Die Grundlagen der Datenbänkerei gilt es zu lernen, lange bevor man anfängt, iwelch daten aus einer Datenbank zu ziehen.

    Sonst gleicht man jemandem, der Wasser holen geht, aber keinen Eimer mitnimmt.

    Wie hätten Sies denn gern?
    ein hübschen einblick mit viele videos, wo die Erklärungen aber schon einige Vorraussetzungen verlangen? vier Views-Videos
    Ein leidlich bei 0 anfangendes aufgebautes Tut in 3 englischen Artikeln? codeproject.com/Articles/1030969/Relational-Datamodel
    vlt eher leicht verdaulich, etwas, was v.a. drauf fokussiert, sich den Datenbank-Zugriff vom Hals zu schaffen? Daten laden und speichern
    Einen Überblick,was man leider gottes alles lernen muss, um eine datenverarbeitung sauber und bis Ende fertig-zuentwickeln? Datenverarbeitungs-Vorraussetzungen

    Morlock schrieb:

    Da nur eine Box aktiviert werden darf ...
    Dafür gibt es RadioButton.
    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!
    Ich verstehe nie, wieso jemand Radiobuttons nutzt.
    So wie sich das für mich anhört ist es mit einem kleinen minimalistischen Control zu handhaben...
    Ner Combobox... Die einfach auf "DropDownList" stellen und die gewünschten Auswahlmöglichkeiten hinterlegen (kannst auch über ne Datenbank oder ähnliches binden/befüllen).

    Eine Listbox geht auch... ist aber weit platzverschwenderischer... Also wozu?

    Immer wenn nur EIN Wert aus MEHREREN ausgewählt werden soll, ist ne DropDownList doch das sinnvollste.
    Da bist du dann ganz frei wie viele Einträge zu da rein wirfst, sie ist nicht größer als ne Textbox und der User kann nur auswählen was du vorgibst...

    Eine Checkbox ist nur bei Ja/Nein Entscheidungen sinnvoll. Wenn du mehr als zwei Antwortmöglichkeiten hast, dann ist es in der Regel das falsche Control.
    Ne Listbox ist mMn dann am sinnvollsten, wenn du MEHRERE Werte aus einer Werteliste markieren/auswählen willst.
    Und Radiobuttons sind zu 99,99999% der Zeit völlig sinnfrei.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    @RodFromGermany hat mich auf die Idee gebracht.
    Stichwort.. CheckedListBox
    habe also keine RadioButton verwendet.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. Me.CheckedListBox.DataSource = Me.GetDataSource()
    3. Me.CheckedListBox.DisplayMember = "Typ"
    4. Me.CheckedListBox.ValueMember = "ID"
    5. End Sub

    Damit man zum Anklicken der Checkboxen nicht mehrfach klicken muss habe ich die
    CheckOnKlick Eigenschaft noch auf True gesetzt.

    Um nur eine Box anklicken zu können habe ich dies so gelöst.

    VB.NET-Quellcode

    1. Private Sub CheckedListBox_ItemCheck(sender As Object, e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox.ItemCheck
    2. Static [Index] As Integer = -1
    3. If e.CurrentValue <> CheckState.Checked Then
    4. If [Index] <> -1 Then
    5. Me.CheckedListBox.SetItemChecked([Index], False)
    6. End If
    7. [Index] = e.Index
    8. End If
    9. End Sub

    Somit ist mein Problem gelöst.
    Herzlichen Dank nochmals an alle für die Unterstützung, hat mir sehr geholfen