日期:2014-05-19  浏览次数:20801 次

集合编辑器属性保存值的问题
我写的个组件,有以下一个属性printRow的属性是我自定义的一个CollectionBase的集合,在用这组件时,设置printRow属性时正确地弹出集合编辑器,可以添加删除编辑,但一确定了再进去却根本没有保存到值,当然在代码里面看的值也是空的。我查了下资料,应该是要“指定特定的设计器序列化策略”,但没找到示例代码,哪位高人帮帮忙
              private   printCollection   _printRow;
                [Category( "列设置 "),
                Description( "有关打印列的设置 ")]
                ///   <summary>
                ///   有关打印列的设置
                ///   </summary>
                public   printCollection   printRow
                {
                        get   {   return   _printRow;   }
                        set   {   _printRow   =   value;   }
                }


------解决方案--------------------
up
------解决方案--------------------
帮LZ顶
------解决方案--------------------
首先你要设定PersistenceMode(PersistenceMode.InnerProperty)
也就是
private printCollection _printRow;
[Category( "列设置 "),
Description( "有关打印列的设置 "),
PersistenceMode(PersistenceMode.InnerProperty)]
/// <summary>
/// 有关打印列的设置
/// </summary>
public printCollection printRow
{
get { return _printRow; }
set { _printRow = value; }
}


这样IDE才会把你的printCollection里的值保存下来
如果你是用系统已有的集合,只要添加TypeConverter(typeof(转换器名))就可以了

如果你是自定义的集合属性,还必须定义自已的类型转换类
继承于ExpandableObjectConverter的转换器

以下代码仅共参考:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Configuration;
using System.Drawing.Design;
using System.Web.UI.Design.WebControls;
using System.Collections.Specialized;
using System.Drawing;
using System.Security.Permissions;
using System.Globalization;
using System.ComponentModel.Design;
namespace Wima.Web.UI
{
/// <summary>
/// 边距
/// </summary>
[TypeConverter(typeof(MarginItemConverter))]
public class MarginItem : IStateManager
{
public MarginItem()
{
}
/// <summary>
/// 左边距
/// </summary>
[Category( "Behavior "), Description( "左边距 "), NotifyParentProperty(true)]
public Unit Left
{
get
{
object o = ViewState[ "Left "];
if (o != null)
{
return (Unit)o;
}
return Unit.Parse( "30 ");
}
set
{
ViewState[ "Left "] = value;