Component1:如何将DictionaryEntry对象作为项目添加到C1List?
Component1: How to Add DictionaryEntry object to C1List as item?
我必须用现有应用程序中的组件一 C1List 替换 .net Listbox。以前它的项目添加如下。
lstFrmType.Items.Add(New DictionaryEntry("False",
FormatPercent(-0.1234,
CInt(numFrmDecimalPlaces.Value),
TriState.True,
TriState.False,
TriState.False)))
但是对于组件一 C1list,我可以看到它有新的方法 AddItem() 但它只接受参数作为字符串。我无法添加 DictionaryEntry 对象。
lstFrmType.AddItem(New DictionaryEntry("False",
FormatPercent(-0.1234,
CInt(numFrmDecimalPlaces.Value),
TriState.True,
TriState.False,
TriState.False)))
还有其他方法可以实现吗?
在未绑定模式下使用 C1List
时存在某些限制(AddItem
仅在未绑定模式下可用)。在未绑定模式下,您不能使用 DisplayMember
/ValueMember
,您肯定需要在此处使用您的 DictionaryEntry
对象。因此最好使用绑定模式 (DataMode = Normal
)。您可以编写一个看起来好像我们正在使用 AddItem
的扩展,但在幕后您可以将数据推送到列表的 DataSource
.
Imports System.Runtime.CompilerServices
Imports C1.Win.C1List
Imports System.ComponentModel
Module C1ListExtensions
<Extension()>
Public Sub AddItem(ByVal list As C1List, ByVal item As DictionaryEntry)
If list.DataMode = DataModeEnum.AddItem Then
Throw New Exception("Need DataMode to be DataMode.Normal")
Else
If list.DataSource Is GetType(BindingList(Of Tuple(Of Object, Object))) Then
' Set DisplayMember and ValueMember to Item1 and Item2
DirectCast(list.DataSource, BindingList(Of Tuple(Of Object, Object))).Add(New Tuple(Of Object, Object)(item.Key, item.Value))
Else
Throw New Exception("Implement your own DataSource here")
End If
End If
End Sub
End Module
此方法的唯一限制是您必须根据您的数据源类型实现此扩展。
我必须用现有应用程序中的组件一 C1List 替换 .net Listbox。以前它的项目添加如下。
lstFrmType.Items.Add(New DictionaryEntry("False",
FormatPercent(-0.1234,
CInt(numFrmDecimalPlaces.Value),
TriState.True,
TriState.False,
TriState.False)))
但是对于组件一 C1list,我可以看到它有新的方法 AddItem() 但它只接受参数作为字符串。我无法添加 DictionaryEntry 对象。
lstFrmType.AddItem(New DictionaryEntry("False",
FormatPercent(-0.1234,
CInt(numFrmDecimalPlaces.Value),
TriState.True,
TriState.False,
TriState.False)))
还有其他方法可以实现吗?
在未绑定模式下使用 C1List
时存在某些限制(AddItem
仅在未绑定模式下可用)。在未绑定模式下,您不能使用 DisplayMember
/ValueMember
,您肯定需要在此处使用您的 DictionaryEntry
对象。因此最好使用绑定模式 (DataMode = Normal
)。您可以编写一个看起来好像我们正在使用 AddItem
的扩展,但在幕后您可以将数据推送到列表的 DataSource
.
Imports System.Runtime.CompilerServices
Imports C1.Win.C1List
Imports System.ComponentModel
Module C1ListExtensions
<Extension()>
Public Sub AddItem(ByVal list As C1List, ByVal item As DictionaryEntry)
If list.DataMode = DataModeEnum.AddItem Then
Throw New Exception("Need DataMode to be DataMode.Normal")
Else
If list.DataSource Is GetType(BindingList(Of Tuple(Of Object, Object))) Then
' Set DisplayMember and ValueMember to Item1 and Item2
DirectCast(list.DataSource, BindingList(Of Tuple(Of Object, Object))).Add(New Tuple(Of Object, Object)(item.Key, item.Value))
Else
Throw New Exception("Implement your own DataSource here")
End If
End If
End Sub
End Module
此方法的唯一限制是您必须根据您的数据源类型实现此扩展。