我有一个带转发器的用户控件。最初在页面加载中我有代码从数据库中获取数据并绑定到转发器。我现在想要在usercontrol之外使用此功能,以便我可以在页面上有多个并将它们绑定到不同的数据。
我的代码现在是:
Imports System.ComponentModel
Public Class UpdateList
Inherits System.Web.UI.UserControl
Private m_dataSource As Object
<TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design")> _
<Category("Data")> _
<DefaultValue(Nothing)> _
Public Property DataSource() As Object
Get
Return Me.m_dataSource
End Get
Set(value As Object)
If Me.m_dataSource <> value Then
m_dataSource = value
tryDataBinding()
End If
End Set
End Property
Public ReadOnly Property UpdateCount As Integer
Get
Return m_UpdateCount
End Get
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub tryDataBinding()
rep_Updates.DataSource = Me.m_dataSource
rep_Updates.DataBind()
End Sub
End Class
我在<DefaultValue(Nothing)>
得到一条波浪线并收到错误:
重载解析失败,因为无法访问&#39;新&#39;这些论点最具体:
&#39; Public Sub New(值为布尔值)&#39;:不是最具体的。
&#39; Public Sub New(值为字节)&#39;:不是最具体的。
&#39; Public Sub New(值为Char)&#39;:不是最具体的。
这是什么意思?感谢
更新
修复方法是将数据源的属性声明更改为...
Private m_dataSource As Object
Public Property DataSource() As Object
Get
Return Me.m_dataSource
End Get
Set(value As Object)
m_dataSource = value
tryDataBinding()
End Set
End Property
答案 0 :(得分:0)
至少在WinForms 中,DefaultValue属性ctor不能为Nothing
(对象浏览器中没有这样的定义)。 DefaultAttribute
不定义初始起始值(尽管名称不同),但不保留何时保留属性值的比较值。无论如何,在webform和datasource的情况下,这似乎是可疑的,所以只需删除属性。
正如您所指出的,TypeConverter
也可能不合适。
答案 1 :(得分:0)
我在
<DefaultValue(Nothing)>
得到了一条波浪线,并且出现了错误:重载解析失败,因为对于这些参数,没有可访问的“新”特定:
Public Sub New(value As Boolean)
:不是最具体的Public Sub New(value As Byte)
:不是最具体的Public Sub New(value As Char)
:不是最具体的。
DefaultValueAttribute
构造函数已重载。此错误意味着VB.NET编译器无法确定要为<DefaultValue(Nothing)>
调用哪些重载。问题是VB.NET中的Nothing
实际上可能意味着两件事:
null
)default(T)
)因此,可以选择每个可用的构造函数重载。您显然希望VB.NET选择Public Sub New(value As Object)
overload,但编译器根本不够聪明,无法识别它。
不幸的是,似乎无法使Nothing
更具体,例如通过CObj(Nothing)
,因为只允许常量值作为自定义属性参数。
如果我找到解决这个特定于VB.NET的问题的解决方案,我会更新我的答案。