【问题标题】:How to get design surface rendering and design time datasource selection with an asp.net user control如何使用 asp.net 用户控件获取设计表面渲染和设计时数据源选择
【发布时间】:2010-10-05 04:11:38
【问题描述】:

如果我创建一个用户控件(编辑:不是 Web 控件/服务器控件),那么获取数据绑定非常简单。我只是添加了一个 datasourceID 属性。

在代码后面 (vb)

Partial Public Class BandedControl
    Inherits UserControl

    Public Property DataSourceID() As String
        Get
            Return MyGridView.DataSourceID
        End Get
        Set(ByVal value As String)
            MyGridView.DataSourceID = value
        End Set
    End Property

End Class

在代码后面 (c#)

public partial class BandedControl : UserControl
{

    public string DataSourceID {
        get { return MyGridView.DataSourceID; }
        set { MyGridView.DataSourceID = value; }
    }
}

我的问题是这会破坏设计时渲染,而且我也没有下拉列表来选择我的数据源。我该如何解决这个问题。 (提示:我想我需要一个类型转换器,但我能找到的所有信息都与服务器控件有关,而不是用户控件)。

【问题讨论】:

    标签: asp.net data-binding .net-3.5


    【解决方案1】:

    您可以尝试将 IDReferenceProperty 属性添加到您的属性定义中...

    public partial class BandedControl : UserControl
    {
        [System.Web.UI.IDReferenceProperty(typeof(DataSourceControl))]
        public string DataSourceID
        {
            get
            {
               return MyGridView.DataSourceID;
            }
            set
            {
               MyGridView.DataSourceID = value; 
            }
        }
    }
    

    有关 IDReferencePropertyAttribute 类的更多信息,请参阅 http://msdn.microsoft.com/en-us/library/system.web.ui.idreferencepropertyattribute.aspx

    如果这不起作用 - 我也会尝试从 DataBoundControl 而不是从 UserControl 继承,看看是否能让你有所收获。

    【讨论】:

    • 谢谢,但这不适用于用户控件,这是我正在尝试使用的。如果我从 DataBoundControl 继承,我将不再是用户控件,并且我将失去使用控件设计器的能力,这是我试图避免的。
    • 是的 - 我认为您需要将其作为 TypeConverter。也许是一个自定义类型转换器,它将从其所在页面而不是控件本身中提取数据源控件。
    【解决方案2】:

    Web 用户控件在运行时动态编译,因此不会在设计时呈现,您要做的是创建一个 Web 自定义控件。您最好的选择是扩展现有的可绑定 Web 控件之一

    http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx

    【讨论】:

    • 感谢收看。但是如果数据源在用户控件内部,那么控件 呈现在 VS2008 的设计图面上(我认为这是 VS2008 的一个新功能)。这篇文章是指 VS.NET (2003),所以我可能仍然可以使用用户控件来做到这一点...... ???
    • 对不起,我没有 vs2008 的经验,但老实说,我认为您花时间创建自定义控件,然后等待答案可能更容易。也许这会有所帮助weblogs.asp.net/scottgu/archive/2005/12/04/432319.aspx
    • 没有迫在眉睫的需要,我在 3 月份开始了为期一个月(希望如此!)的 web 项目,我目前正在做一些我有更多经验的 winforms 的东西,我只是在摸索我的选择.我会等待其他答案,如果无法完成(或没人知道该怎么做),我会重新考虑。
    【解决方案3】:

    不确定这是否正是您想要的,但我似乎记得他们在某些 dnr 电视剧中展示了类似的内容。

    我认为是米格尔·卡斯特罗第 1 和第 2 集,但可能是第 31 集。

    所有视频的存档是here

    【讨论】:

    • 谢谢我现在查看它们。但我认为这些是关于网络控件/服务器控件而不是用户控件....
    • 我很确定你不能用用户控件做你想做的事,必须使用网络/服务器控件
    • 是的,我得出了同样的结论。真可惜。
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 2013-10-27
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2010-10-07
    相关资源
    最近更新 更多