Dirty property value persist problem

Y

yp.yean

Hi,

I created a custom control, and encountered a dirty property value
persistence problem.
I created a property with a custom class type, call SQLSettings which
holds the SQL connection parameters, the class as follows:


public sealed class SQLSettings
{
private string serverName;
.......


public SQLSettings()
{
this.serverName = string.Empty;
......
}


[NotifyParentProperty(true)]
public string ServerName
{
get
{
return this.serverName;
}
set
{
this.serverName = value;
}
}
...................


And, I also created an mapping TypeConverter and UITypeEditor classes
to handle the design-time founctinality. The property I created in my
conbtrol as follows:


[BrowsableAttribute(true)]
[CategoryAttribute("Behavior")]
[BindableAttribute(true)]
[NotifyParentProperty(true)]
[EditorAttribute(typeof(SQLSettingsUITypeEditor),
typeof(UITypeEditor))]

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

[TypeConverter((Type)typeof(SQLSettingsTypeConverter))]
[PersistenceModeAttribute(PersistenceMode.InnerProperty)]
public SQLSettings SQLSettingsData
{
get
{
return this._sqlSettings;
}
set
{
this._sqlSettings = value;
}
}


They all works fine when first set value to this property, I can see
the persisted data showed in .aspx file. When I go back to design view
and update the property value via my UITypeEditor, I can see the value
already updated in VS.NET properties browser. But when I turn to see
..aspx file in code view, I didn't see the dirty property value updated
in .aspx file. When I turn to design view, the updated property value
is lost, it remain keep the first persisted value.


How to solve this problem? Any idea?
Thank you for your kindly help.
 
T

Teemu Keiski

As it's complex type, property should be read-only

....
public SQLSettings SQLSettingsData
{
get
{
if (this._sqlSettings == null)
this._sqlSettings = new SQLSettings();
return this._sqlSettings;
}

}
 
Y

yp.yean

Dear Teemu,

Thank you for your kindly relply. But if the complex type property need
to be read-only, how can I set the value to it through my UITypeEditor?
Is there any solution? Thank you.

Daniel

Teemu Keiski 寫é“:
As it's complex type, property should be read-only

...
public SQLSettings SQLSettingsData
{
get
{
if (this._sqlSettings == null)
this._sqlSettings = new SQLSettings();
return this._sqlSettings;
}

}


--
Teemu Keiski
ASP.NET MVP, AspInsider
Finland, EU
http://blogs.aspadvice.com/joteke


Hi,

I created a custom control, and encountered a dirty property value
persistence problem.
I created a property with a custom class type, call SQLSettings which
holds the SQL connection parameters, the class as follows:


public sealed class SQLSettings
{
private string serverName;
.......


public SQLSettings()
{
this.serverName = string.Empty;
......
}


[NotifyParentProperty(true)]
public string ServerName
{
get
{
return this.serverName;
}
set
{
this.serverName = value;
}
}
..................


And, I also created an mapping TypeConverter and UITypeEditor classes
to handle the design-time founctinality. The property I created in my
conbtrol as follows:


[BrowsableAttribute(true)]
[CategoryAttribute("Behavior")]
[BindableAttribute(true)]
[NotifyParentProperty(true)]
[EditorAttribute(typeof(SQLSettingsUITypeEditor),
typeof(UITypeEditor))]

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

[TypeConverter((Type)typeof(SQLSettingsTypeConverter))]
[PersistenceModeAttribute(PersistenceMode.InnerProperty)]
public SQLSettings SQLSettingsData
{
get
{
return this._sqlSettings;
}
set
{
this._sqlSettings = value;
}
}


They all works fine when first set value to this property, I can see
the persisted data showed in .aspx file. When I go back to design view
and update the property value via my UITypeEditor, I can see the value
already updated in VS.NET properties browser. But when I turn to see
.aspx file in code view, I didn't see the dirty property value updated
in .aspx file. When I turn to design view, the updated property value
is lost, it remain keep the first persisted value.


How to solve this problem? Any idea?
Thank you for your kindly help.
 
T

Teemu Keiski

Note that read-only means that you don't set the reference, you set directly
its properties.means that in your editor, you don't instantiate new
SqlSettings, but rather set the properties of the instance returned to you
by the control. Though this also more from page parsing point of view,
generic rule is that complex types must be read-only because page parsing
won't set the instance.

--
Teemu Keiski
ASP.NET MVP, AspInsider
Finland, EU
http://blogs.aspadvice.com/joteke

Dear Teemu,

Thank you for your kindly relply. But if the complex type property need
to be read-only, how can I set the value to it through my UITypeEditor?
Is there any solution? Thank you.

Daniel

Teemu Keiski ??:
As it's complex type, property should be read-only

...
public SQLSettings SQLSettingsData
{
get
{
if (this._sqlSettings == null)
this._sqlSettings = new SQLSettings();
return this._sqlSettings;
}

}


--
Teemu Keiski
ASP.NET MVP, AspInsider
Finland, EU
http://blogs.aspadvice.com/joteke


Hi,

I created a custom control, and encountered a dirty property value
persistence problem.
I created a property with a custom class type, call SQLSettings which
holds the SQL connection parameters, the class as follows:


public sealed class SQLSettings
{
private string serverName;
.......


public SQLSettings()
{
this.serverName = string.Empty;
......
}


[NotifyParentProperty(true)]
public string ServerName
{
get
{
return this.serverName;
}
set
{
this.serverName = value;
}
}
..................


And, I also created an mapping TypeConverter and UITypeEditor classes
to handle the design-time founctinality. The property I created in my
conbtrol as follows:


[BrowsableAttribute(true)]
[CategoryAttribute("Behavior")]
[BindableAttribute(true)]
[NotifyParentProperty(true)]
[EditorAttribute(typeof(SQLSettingsUITypeEditor),
typeof(UITypeEditor))]

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

[TypeConverter((Type)typeof(SQLSettingsTypeConverter))]
[PersistenceModeAttribute(PersistenceMode.InnerProperty)]
public SQLSettings SQLSettingsData
{
get
{
return this._sqlSettings;
}
set
{
this._sqlSettings = value;
}
}


They all works fine when first set value to this property, I can see
the persisted data showed in .aspx file. When I go back to design view
and update the property value via my UITypeEditor, I can see the value
already updated in VS.NET properties browser. But when I turn to see
.aspx file in code view, I didn't see the dirty property value updated
in .aspx file. When I turn to design view, the updated property value
is lost, it remain keep the first persisted value.


How to solve this problem? Any idea?
Thank you for your kindly help.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top