重载解决方案失败,因为无法访问'新的'这些论点最具体:

时间:2014-04-24 10:22:41

标签: vb.net data-binding user-controls

我有一个带转发器的用户控件。最初在页面加载中我有代码从数据库中获取数据并绑定到转发器。我现在想要在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

2 个答案:

答案 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实际上可能意味着两件事:

  • 空引用(C#中的null
  • 分配给它的类型的默认值(C#中的default(T)

因此,可以选择每个可用的构造函数重载。您显然希望VB.NET选择Public Sub New(value As Object) overload,但编译器根本不够聪明,无法识别它。

不幸的是,似乎无法使Nothing更具体,例如通过CObj(Nothing),因为只允许常量值作为自定义属性参数。

如果我找到解决这个特定于VB.NET的问题的解决方案,我会更新我的答案。