Benutzer mit den meisten Antworten
Doppelte Checkbox und Namensliste

Frage
-
Hallo, ich muss aus einer Access Tabelle auf einer Form eine Namenliste darstellen die folgender massen aussieht.
Checkbox|Checkbox|Nachname Vorname
Checkbox|Checkbox|Nachname Vorname
Checkbox|Checkbox|Nachname Vornameman kann die ganze Liste durchgehen und man hat die Möglichkeit die Checkboxen anzuklicken, die ganze Liste muss ich in einer anderen Tabelle ablegen und auch wieder laden können.
Wie stelle ich das am besten an? Eine Listcheckbox kann ich ja schon mal nicht nehmen, oder?
Antworten
-
Hallo Michael,
Hallo Peter, ne ich meinte aus einer Tabelle kommen
die Namen (Name,Vorname) damit möchte ich ein
Grid oder anderes aufbauen in der FormHier mal ein kleines Beispiel.
Kopiere den Code einfach in ein leeres Formmodul (Form1.vb)' / Beginn Code Form1.vb
Public Class Form1
Private WithEvents DGV As DataGridView
Private TextBox1 As TextBoxPrivate WithEvents mDT As DataTable
Private WithEvents mDV As DataViewPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateControls()
CreateData()DGV.DataSource = mDV
With DGV
.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight.Columns(2).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleCenter.Columns(4).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleCenter.AutoResizeColumns()
End With
End SubPrivate Sub CreateData()
Dim i As Integer
Dim DR As DataRow
Dim DC As DataColumnDim VNames As String() = _
New String() _
{"Otto", "Maria", "Fritz", _
"Klara", "Hans", "Klaus"}Dim NNames As String() = _
New String() _
{"Müller", "Berger", "Maier", _
"Huber", "Moser", "Schreiner"}mDT = New DataTable
With mDT
.Namespace = "mDT"
DC = .Columns.Add("ID", GetType(Integer))
DC.Unique = TrueDC = .Columns.Add("VorName", GetType(String))
DC.AllowDBNull = FalseDC = .Columns.Add("chkVN", GetType(Boolean))
DC.DefaultValue = FalseDC = .Columns.Add("NachName", GetType(String))
DC.AllowDBNull = FalseDC = .Columns.Add("chkNN", GetType(Boolean))
DC.DefaultValue = FalseFor i = 0 To VNames.GetUpperBound(0)
DR = .NewRow
DR.Item(0) = i + 1
DR.Item(1) = VNames(i)
DR.Item(2) = False
DR.Item(3) = NNames(i)
DR.Item(4) = False
.Rows.Add(DR)
Next
End With
mDV = New DataView(mDT)
End SubPrivate Sub CreateControls()
DGV = New DataGridView
With DGV
.Name = "DGV"
.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 60).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom.DefaultCellStyle.Font = _
New Font("Arial", 12).ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)End With
Me.Controls.Add(DGV)TextBox1 = New TextBox
With TextBox1
.Name = "TextBox1"
.Font = New Font("Arial", 12).SetBounds _
(10, DGV.Bottom + 10, _
DGV.Width, .Height).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom.ReadOnly = True
End With
Me.Controls.Add(TextBox1)
Me.Size = New Size(400, 320)
End SubPrivate Sub DGV_CellContentClick _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs _
) Handles DGV.CellContentClickShowValues(e.RowIndex)
End SubPrivate Sub DGV_RowEnter _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs _
) Handles DGV.RowEnterIf e.RowIndex = DGV.Rows.Count - 1 Then
DGV.Rows(e.RowIndex).Cells(0).Value = NewID()
End If
ShowValues(e.RowIndex)
End SubPrivate Sub ShowValues(ByVal RowIndex As Integer)
With DGV.Rows(RowIndex)
TextBox1.Text = _
"ID " & .Cells(0).EditedFormattedValue.ToString & ": " & _
.Cells(1).EditedFormattedValue.ToString & ": " & _
.Cells(2).EditedFormattedValue.ToString & " | " & _
.Cells(3).EditedFormattedValue.ToString & ": " & _
.Cells(4).EditedFormattedValue.ToString
End With
End SubPublic Function NewID() As Integer
Return DGV.Rows.Count
End FunctionPrivate Sub DGV_DataError _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs _
) Handles DGV.DataErrorMsgBox(e.Exception.Message)
e.Cancel = True
End SubPrivate Sub DGV_RowValidating _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs _
) Handles DGV.RowValidatingDim DRV As DataRowView = _
mDV.Item(e.RowIndex)Dim DR As DataRow = DRV.Row
If DRV.IsNew Then
If RowOK(DR) Then
DRV.EndEdit()
Else
Exit Sub
End If
End IfConsole.WriteLine _
(DR.Item(0).ToString & "; " & _
DR.Item(1).ToString & "; " & _
DR.Item(2).ToString & "; " & _
DR.Item(3).ToString)
End SubPrivate Function RowOK(ByVal DR As DataRow) As Boolean
Dim Ret As Boolean = False
Select Case False
Case IsNumeric(DR.Item(0))
Case DR.Item(1).ToString.Length > 0
Case (DR.Item(3).ToString.Length > 0)
Case Else
Ret = True
End Select
Return Ret
End Function
End Class
' \\\ E N T EJede Änderung in einer der beiden CheckBoxColumns wird
sofort in der Sub ShowValues sichttbar.Sub DGV_RowValidating() wäre ein geeigneter Zeitpunkt
Änderungen in der mDT in eine zweite DataTable mit den
Spalten ID, chkVN und chkNN zu übernehmen und diese
DataTable kannst Du dann zu einem beliebigen Zeitpunkt
in Deine DB übernehmen.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Thorsten DörflerModerator Donnerstag, 26. August 2010 19:41
Alle Antworten
-
Hallo Michael,
Hallo, ich muss aus einer Access Tabelle auf einer Form eine
Namenliste darstellen die folgender massen aussieht.
Checkbox|Checkbox|Nachname Vorname
Checkbox|Checkbox|Nachname Vorname
Checkbox|Checkbox|Nachname Vorname
man kann die ganze Liste durchgehen und man hat die
Möglichkeit die Checkboxen anzuklicken, die ganze Liste
muss ich in einer anderen Tabelle ablegen und auch
wieder laden können.
Wie stelle ich das am besten an? Eine Listcheckbox kann
ich ja schon mal nicht nehmen, oder?So ganz verstehe ich den Zusammenhang zwischen Deiner
Namensliste in der DB-Tabelle und den Checkboxen (noch)
nicht.
Soll es für jeweils einen Nach- u. einen Vornamen zwei
Checkboxen geben?
Also sowas in der Art:x Müller x Fritz
o Maier x Franz
x Huber o Maria
x Schneider x PaulaIn einem DataGridView mit je zwei Checkbox-Columns und
zwei Textbox-Columns liesse sich das recht einfach darstellen.
Wie konkret (FeldNamen, FeldTypen) sieht diese Namensliste
in der DB aus? Und wie genau soll die Ausgabetabelle aussehen?Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Hallo Peter, ne ich meinte aus einer Tabelle kommen die Namen (Name,Vorname)
damit möchte ich ein Grid oder anderes aufbauen in der FormCheckbox|Checkbox|Nachname Vorname|ID Hidden
Checkbox|Checkbox|Nachname Vorname|ID Hidden
Checkbox|Checkbox|Nachname Vorname|ID Hidden
Die Checkboxen wären neu und dynamisch im dem neuen Gridview oder anderem . Das Ergebnis soll in einer anderen Tabelle gespeichert werden . Nach der Art
Check1,check2,id auf Tabelle1 -
Hi Michael,wenn du der Tabelle per Code booleasche Spalten hinzufügst, dann werden CheckBoxes angezeigt. Deren Inhalt kann man abfragen. Unklar ist aus Deinen Ausführungen aber die Bedientechnologie. Wann soll eine Kopie oder ein Verweis in ein zweite Liste eingetregen werden, um diese im zweiten Grid anzuzeigen. Mögloch wäre da ein Button_Klick am Ende aller Markierungen, ein Contectmenü mit entsprechendem Eintrag, ein Doppelklick auf den gewünschten Eintrag usw.
--
Viele Gruesse
Peter -
Hallo Michael,
Hallo Peter, ne ich meinte aus einer Tabelle kommen
die Namen (Name,Vorname) damit möchte ich ein
Grid oder anderes aufbauen in der FormHier mal ein kleines Beispiel.
Kopiere den Code einfach in ein leeres Formmodul (Form1.vb)' / Beginn Code Form1.vb
Public Class Form1
Private WithEvents DGV As DataGridView
Private TextBox1 As TextBoxPrivate WithEvents mDT As DataTable
Private WithEvents mDV As DataViewPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateControls()
CreateData()DGV.DataSource = mDV
With DGV
.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight.Columns(2).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleCenter.Columns(4).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleCenter.AutoResizeColumns()
End With
End SubPrivate Sub CreateData()
Dim i As Integer
Dim DR As DataRow
Dim DC As DataColumnDim VNames As String() = _
New String() _
{"Otto", "Maria", "Fritz", _
"Klara", "Hans", "Klaus"}Dim NNames As String() = _
New String() _
{"Müller", "Berger", "Maier", _
"Huber", "Moser", "Schreiner"}mDT = New DataTable
With mDT
.Namespace = "mDT"
DC = .Columns.Add("ID", GetType(Integer))
DC.Unique = TrueDC = .Columns.Add("VorName", GetType(String))
DC.AllowDBNull = FalseDC = .Columns.Add("chkVN", GetType(Boolean))
DC.DefaultValue = FalseDC = .Columns.Add("NachName", GetType(String))
DC.AllowDBNull = FalseDC = .Columns.Add("chkNN", GetType(Boolean))
DC.DefaultValue = FalseFor i = 0 To VNames.GetUpperBound(0)
DR = .NewRow
DR.Item(0) = i + 1
DR.Item(1) = VNames(i)
DR.Item(2) = False
DR.Item(3) = NNames(i)
DR.Item(4) = False
.Rows.Add(DR)
Next
End With
mDV = New DataView(mDT)
End SubPrivate Sub CreateControls()
DGV = New DataGridView
With DGV
.Name = "DGV"
.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 60).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom.DefaultCellStyle.Font = _
New Font("Arial", 12).ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)End With
Me.Controls.Add(DGV)TextBox1 = New TextBox
With TextBox1
.Name = "TextBox1"
.Font = New Font("Arial", 12).SetBounds _
(10, DGV.Bottom + 10, _
DGV.Width, .Height).Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom.ReadOnly = True
End With
Me.Controls.Add(TextBox1)
Me.Size = New Size(400, 320)
End SubPrivate Sub DGV_CellContentClick _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs _
) Handles DGV.CellContentClickShowValues(e.RowIndex)
End SubPrivate Sub DGV_RowEnter _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs _
) Handles DGV.RowEnterIf e.RowIndex = DGV.Rows.Count - 1 Then
DGV.Rows(e.RowIndex).Cells(0).Value = NewID()
End If
ShowValues(e.RowIndex)
End SubPrivate Sub ShowValues(ByVal RowIndex As Integer)
With DGV.Rows(RowIndex)
TextBox1.Text = _
"ID " & .Cells(0).EditedFormattedValue.ToString & ": " & _
.Cells(1).EditedFormattedValue.ToString & ": " & _
.Cells(2).EditedFormattedValue.ToString & " | " & _
.Cells(3).EditedFormattedValue.ToString & ": " & _
.Cells(4).EditedFormattedValue.ToString
End With
End SubPublic Function NewID() As Integer
Return DGV.Rows.Count
End FunctionPrivate Sub DGV_DataError _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs _
) Handles DGV.DataErrorMsgBox(e.Exception.Message)
e.Cancel = True
End SubPrivate Sub DGV_RowValidating _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs _
) Handles DGV.RowValidatingDim DRV As DataRowView = _
mDV.Item(e.RowIndex)Dim DR As DataRow = DRV.Row
If DRV.IsNew Then
If RowOK(DR) Then
DRV.EndEdit()
Else
Exit Sub
End If
End IfConsole.WriteLine _
(DR.Item(0).ToString & "; " & _
DR.Item(1).ToString & "; " & _
DR.Item(2).ToString & "; " & _
DR.Item(3).ToString)
End SubPrivate Function RowOK(ByVal DR As DataRow) As Boolean
Dim Ret As Boolean = False
Select Case False
Case IsNumeric(DR.Item(0))
Case DR.Item(1).ToString.Length > 0
Case (DR.Item(3).ToString.Length > 0)
Case Else
Ret = True
End Select
Return Ret
End Function
End Class
' \\\ E N T EJede Änderung in einer der beiden CheckBoxColumns wird
sofort in der Sub ShowValues sichttbar.Sub DGV_RowValidating() wäre ein geeigneter Zeitpunkt
Änderungen in der mDT in eine zweite DataTable mit den
Spalten ID, chkVN und chkNN zu übernehmen und diese
DataTable kannst Du dann zu einem beliebigen Zeitpunkt
in Deine DB übernehmen.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Thorsten DörflerModerator Donnerstag, 26. August 2010 19:41
-
Hallo Michael,
Hey super danke, damit klappt es.
Kleine Modifizierungen aber sowas
habe ich gesucht.Schön, wenns geholfen hat.
Unterwww.gssg.de -> Visual Basic -> VB.net
findest Du noch mehr Beispiele zum DataGridView
sowie zu DataTable, DataView usw.
Evtl. ist da noch der eine oder andere Denkanstoss
für Dein Projekt dabei.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)