类型 UserControl 没有 public 属性 命名的列

Type UserControl does not have a public property named Columns

我正在尝试开发一个 UserControl,在 Panel

中包含一个 GridView
<asp:Panel runat="server" ID="panel"> 
    <asp:GridView ID="gridView" runat="server" AutoGenerateColumns="false">
    </asp:GridView>
</asp:Panel>

代码隐藏

public partial class DropDownMultiColumn : UserControl
{
    [System.Web.UI.IDReferenceProperty(typeof(DataControlFieldCollection))]
    [PersistenceMode(PersistenceMode.InnerProperty)]

    public virtual DataControlFieldCollection Columns
    {
        get { return gridView.Columns; }
        set
        {
            gridView.Columns.Clear();
            foreach (DataControlField c in value)
            {
                gridView.Columns.Add(c);
            }
        }
    }
}

我已将控件包含到 ASPX 页面中,使用 Columns public 属性

<dd:DropDownMultiColumn id="_dd_InsertStore" runat="server" DataSourceID="_dsTest" >
    <Columns>
        <asp:BoundField DataField="MGCOD" HeaderText="MGCOD"></asp:BoundField>
        <asp:BoundField DataField="MGDSC" HeaderText="MGDSC"></asp:BoundField>
    </Columns>
</dd:DropDownMultiColumn>

但我在设计部分收到以下错误:

Type 'System.Web.UI.UserControl' does not have a public property named 'Columns'

我已经尝试实施 this solution,但它不起作用。有什么想法吗?

下面是该问题的解决方法。

声明 属性 内容 JSON

Columns 声明为属性,包含 JSON 格式的所需数据

<dd:DropDownMultiColumn id="_ddInsertStore" runat="server" DataSourceID="_dsTest" Columns="
    [{ 'DataField':'MGCOD', 'HeaderText':'MGCOD' },
    { 'DataField':'MGDSC', 'HeaderText':'MGDSC' }]">
</dd:DropDownMultiColumn>


将JSON转换为绑定字段

OnLoad 事件中,反序列化 JSON 并构建 BoundField 数据

protected override void OnLoad(EventArgs e)
{
    List<Column> columns = JsonConvert.DeserializeObject<List<Column>>(Columns);

    gridView.Columns.Clear();
    foreach (Column column in columns)
    {
        BoundField boundField = new BoundField();
        boundField.DataField = column.DataField;
        boundField.HeaderText = (string) column.HeaderText;
        gridView.Columns.Add(boundField);
    }
}

声明一个 Column class,具有所需的属性。

public class Column
{
    public string DataField { get; set; }
    public string HeaderText { get; set; }
}