类型UserControl没有名为Columns的公共属性

时间:2017-10-04 14:00:42

标签: asp.net gridview user-controls

我正在尝试在UserControl

内开发包含GridView的{​​{1}}
Panel

背后的代码

<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

但是我在设计部分出现以下错误:

<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>

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

1 个答案:

答案 0 :(得分:0)

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

声明具有JSON内容的属性

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

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


将JSON转换为BoundField

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类。

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