在C#中如何从派生类构造函数中访问派生类的属性?

时间:2014-02-16 21:31:04

标签: c# inheritance datagridview constructor

我有一个DataGridView派生控件,它定义了一些新属性。它们在属性检查器中按预期显示输入的连接字符串值,但是当我编译程序时,如果我在:if (ConnectionString == "" )行的构造函数中放置一个中断 - 它显示ConnectionString为null,因为它确实是connectionString。我意识到我应该在写完之后测试null,但关键是该属性中有一个字符串。

目的是将table和connectionString定义为填充它的属性。我做错了什么?

namespace ASControls
{

    public partial class ASDataGridView : DataGridView  
    {

        private string connectionString; 
        // Declares the property.
        [Description("Set the Connection String for the datbase concerned"),
        Category("Data")]
        public string ConnectionString
        {
           get { return connectionString; }
           set {connectionString= value; }
        }

        public ASDataGridView()
        {
        //
        // The InitializeComponent() call is required for Windows Forms designer support.
        //
        InitializeComponent();

        //
        // TODO: Add constructor code after the InitializeComponent() call.
        //

        if (ConnectionString == "" )
        {           
            MessageBox.Show("You must set the connection string in order to use an ASDataGridView control");
            return;
        } else {

            InitData(ConnectionString);
        }

        }
        ...

1 个答案:

答案 0 :(得分:0)

西蒙所说的是,在设计师中,你无法调用你的数据库。解决方案是:

if (IsInDesignMode) // Code runs in Blend --> create design time data.
{
    StatBarTextProp = "IN Design mode";
}
else // Code runs "for real"
{
    StatBarTextProp = /* Get from DB here*/ ;

}

现在,您的运行时很乐意从数据库中获取内容,并且您的设计将包含您默认的内容。


是的,你可以阅读更多here,但基本上是:

  

DesignerProperties.IsInDesignMode附加属性

     

.NET Framework 4.5其他版本尚未对此主题进行评分 - 评价此主题   获取或设置DependencyObject是否在设计器的上下文中运行。

     

命名空间:System.ComponentModel

     

程序集:PresentationFramework(在PresentationFramework.dll中)   XMLNS for XAML:未映射到xmlns。