Источник данных с параметром на странице ASPX для перемещения в пользовательском элементе управления - PullRequest
2 голосов
/ 02 сентября 2010

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

В моем коде у меня есть объект ObjectDataSource со следующими параметрами

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
   TypeName="DataSetTableAdapters.PhotosTableAdapter"
   SelectMethod="GetPhotosForAlbum">
   <SelectParameters>
       <asp:ControlParameter Name="albumID" ControlID="txtAlbumID" Type="Int32"/>
   </SelectParameters>
</asp:ObjectDataSource>

Этот фрагмент кода автоматически связывает скрытое поле "txtAlbumId" с источником данных. В моей ревизии этот источник данных должен быть перемещен в пользовательский элемент управления.

Каков наилучший способ справиться со сценарием, подобным этому?

С уважением, Lorenzo

Ответы [ 2 ]

2 голосов
/ 02 сентября 2010

Вы можете создать свойство в пользовательском элементе управления для показа свойства в скрытом поле следующим образом:

public int AlbumID
{
    get { return Convert.ToInt32(txtAlbumID.Value); }
    set { txtAlbumID.Value = value.ToString(); }
}

После этого вы сможете подключить источник данных объекта к пользовательскому элементу управления:

<asp:ControlParameter Name="albumID" ControlID="myUserControl" PropertyName="AlbumID" Type="Int32"/>

Редактировать:

Есть несколько способов обойти наоборот (например, источник данных в пользовательском элементе управления).Один из подходов является жизнеспособным, но я нахожу в нем некоторую путаницу, связанную с тем, что дизайнер представляет коллекцию параметров из пользовательского элемента управления как открытое свойство:

public ParameterCollection SelectParameters
{
    get { return ObjectDataSource1.SelectParameters; }
}

Это позволяет заполнить коллекцию параметров со страницы.например так:

<my:UserControl runat="server" ID="myUserControl">
    <SelectParameters>
        <%-- ... --%>
    </SelectParameters>
</my:UserControl>

Если вы используете конструктор, ваш элемент управления всегда будет отображать ошибку, но она работает.(Обратите внимание, что я использовал этот подход со строкой запроса и параметрами сеанса. Было бы интересно посмотреть, сохранится ли он в параметрах управления.)

Однако я думаю, что самый простой способ - это обменControlParameter для простого старого Parameter и выставьте значение по умолчанию через свойство.

public int AlbumID
{
    get { return Convert.ToInt32(ObjectDataSource1.Parameters[0].DefaultValue); }
    set { ObjectDataSource1.Parameters[0].DefaultValue = value.ToString(); }
}

Затем можно привязать данные или напрямую назначить свойству AlbumID элемента управления и ожидать значениядля пересылки в параметр.

0 голосов
/ 02 сентября 2010

Другим вариантом было бы просто сделать это программно.

var cp = ObjectDataSource1.SelectParameters["albumID"] as ControlParameter;

cp.ControlID = //Any one of a dozen ways to get this value into the control
...