我真的可以在這里使用一些幫助。
我有一個包含以下內容的串列(字串):
A/a
A/b
A/c
B/a
B/b
B/c
C/a
C/b
C/c
..等
我正在嘗試在按第一個字母分組的 TableLayoutPanel 中創建控制元件,以便布局看起來像這樣。
標題 A
標簽 | 文本框 a
標簽 b | 文本框 b
標簽 c | 文本框 c
標題 B
標簽 | 文本框 a
標簽 b | 文本框 b
標簽 c | 文本框 c
標題 C
標簽 | 文本框 a
標簽 b | 文本框 b
標簽 c | 文本框 c
我當前的代碼對 List 進行排序并創建控制元件:
For Each item In _List
TableLayoutPanel1.Controls.Add(New Label With {
.Name = cc.ToString,
.Text = SplitContentControl(cc.ToString, ""),
.Height = 20,
.Font = New Font("Segoe UI", 12,
FontStyle.Bold)
})
TableLayoutPanel1.Controls.Add(New TextBox With {.Height = 20,
.Font = New Font("Segoe UI", 12,
FontStyle.Bold)})
Next
我試過像這樣創建一個 Dictionary(Of String, String) :
Dim dict As Dictionary(Of String, String) = ccs.ToDictionary(Function(x) x.split("/")(0), Function(y) y.split("/")(1))
但當然不能這樣做,因為這會產生重復項。
我還嘗試使用 Split("/") 和 Lambda 運算式創建一個新的 List(Of ControlID),其中 ControlID 是類
Public Class ControlID
Public ControlHead as String
Public ControlName as String
End Class
但無論我嘗試什么,我似乎都無法讓 Lambda 為我作業。
如果有人有解決方案,請提供幫助。我會很感激。
uj5u.com熱心網友回復:
也許這會給你一些想法......
Private Sub Test()
Dim l As List(Of String)
'some data
l = (From s In {"B", "A", "C"}
From sm In {"c", "b", "a"}
Select s & "/" & sm).ToList
Dim ctrlGRPS
ctrlGRPS = From s In l
Let c = New ControlID(s)
Select c Order By c.ControlName Order By c.ControlHead
Group By h = c.ControlHead
Into HeadGrp = Group
For Each head In ctrlGRPS
For Each ctrl In head.HeadGrp
Stop 'look at ctrl
Next
Next
End Sub
Public Class ControlID
Public ControlHead As String
Public ControlName As String
Public Sub New(s As String)
Dim p() As String = s.Split("/"c)
Me.ControlHead = p(0)
Me.ControlName = p(1)
End Sub
End Class
uj5u.com熱心網友回復:
除非我誤解了您的問題,否則以下內容應該有效:
Dim controlIds As IEnumerable(Of ControlID) = ccs
.Select(Function(x) New ControlID With { .ControlHead = x.split("/")(0), .ControlName = x.split("/")(1) })
但是,如果您創建了一個創建 ControlID 物件的方法,則會更容易閱讀,如下所示:
Private Function ParseControlId(value As String) As ControlID
Dim parts() As String = value.Split("/")
Return New ControlID With { .ControlHead = parts(0), .ControlName = parts(1) }
End Function
然后,在您的 LINQ 中,您可以參考該函式而不是 lambda:
Dim controlIds As IEnumerable(Of ControlID) = ccs.Select(AddressOf ParseControlID)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399236.html
上一篇:C#mongo分頁與聚合
下一篇:可能的空參考回傳c#linq
