类型 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; }
}
我正在尝试开发一个 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; }
}