Как открыть коллекцию столбцов элемента управления GridView, который находится внутри пользовательского элемента управления - PullRequest
1 голос
/ 27 мая 2009

См. Редактировать.

Я хочу иметь возможность сделать это в aspx, который потребляет пользовательский элемент управления.

<uc:MyControl ID="MyGrid" runat="server">
     <asp:BoundField DataField="FirstColumn" HeaderText="FirstColumn" />
     <asp:BoundField DataField="SecondColumn" HeaderText="SecondColumn" />
</uc>

У меня есть этот код (который не работает). Есть идеи, что я делаю не так?

VB

Partial Public Class MyControl
    Inherits UserControl

    <System.Web.UI.IDReferenceProperty(GetType(DataControlFieldCollection))> _
    Public Property Columns() As DataControlFieldCollection
        Get
            Return MyGridView.Columns
        End Get
        Set(ByVal value As DataControlFieldCollection)
            ' The Columns collection of the GridView is ReadOnly, so I rebuild it
            MyGridView.Columns.Clear()
            For Each c As DataControlField In value
                MyGridView.Columns.Add(c)
            Next
        End Set
    End Property

    ...

End Class

C #

public partial class MyControl : UserControl
{
    
    [System.Web.UI.IDReferenceProperty(typeof(DataControlFieldCollection))]
    public DataControlFieldCollection Columns {
        get { return MyGridView.Columns; }
        set {
            MyGridView.Columns.Clear();
            foreach (DataControlField c in value) {
                MyGridView.Columns.Add(c);
            }
        }
    }

    ...

}

EDIT:

На самом деле это работает, но автозаполнение не работает между открывающим и закрывающим тегами uc: MyControl, и я получаю предупреждения компилятора: -

  • Не допускается содержимое между открывающим и закрывающим тегами для элемента «MyControl».

  • Проверка (XHTML 1.0 Transitional): элемент 'columns' не поддерживается.

  • Элемент BoundField не является известным элементом. Это может произойти, если на веб-сайте произошла ошибка компиляции или отсутствует файл web.config.

Так что, думаю, мне нужно использовать какую-то директиву, чтобы сообщить компилятору, что он должен ожидать содержимое между тегами.

Есть идеи?

1 Ответ

3 голосов
/ 23 мая 2010

Я нашел решение этой проблемы

Шаг 1 - Добавьте следующее свойство в свой UserControl

[ MergableProperty(false), DefaultValue((string)null), 
Editor("System.Web.UI.Design.WebControls.DataControlFieldTypeEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
    typeof(UITypeEditor)), 
PersistenceMode(PersistenceMode.InnerProperty)]
public virtual DataControlFieldCollection Columns
{
    get
    {
        return GridView1.Columns;
    }
}

Secand - вы можете установить коллекцию столбцов внутри тега usercontrol, например

 <uc1:TControl ID="TControl1" runat="server" >
    <Columns>
      <asp:BoundField DataField="ID" HeaderText="UserID" />
      <asp:BoundField DataField="Name" HeaderText="UserName" />
    </Columns>
    </uc1:TControl>

Visual Studio включит автозаполнение для свойства столбцов, но дизайнер выдаст исключение

Наконец, вы можете связать gridview внутри вашего пользовательского элемента управления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...