2010-02-16 3 views
1

Я создал UserControl с ObjectDataSource + ASPxGridView. SelectMethod из ObjectDataSource Я установил динамически в зависимости от общественного параметра UserControl:ObjectDataSource -> SelectMethod не указан

private int _companyID = -1; 
public int CompanyID 
{ 
    get { return _companyID; } 
    set 
    { 
     _companyID = value; 

     dsPersons.SelectMethod = "GetPersonsByCompany"; 
     dsPersons.SortParameterName = "sort"; 
     dsPersons.SelectParameters.Clear(); 
     dsPersons.SelectParameters.Add("companyID", DbType.Int32, value.ToString()); 
    } 
} 

Когда я использую свой контроль на странице, как это:

<uc:PersonsManager ID="personsManager" runat="server" CompanyID="2" /> 

или положить его в другой ASPxGridView так:

<dxwgv:ASPxGridView ID="gridViewCompany" runat="server" DataSourceID="dsCompany" KeyFieldName="ID" Width="100%" 
    AutoGenerateColumns="false"> 
    <Columns> 
     <dxwgv:GridViewDataColumn> 
      <DataItemTemplate> 
       <uc:PersonsManager ID="personsManager" runat="server" CompanyID='<%# Bind("ID") %>' /> 
      </DataItemTemplate> 
     </dxwgv:GridViewDataColumn> 
    </Columns> 
</dxwgv:ASPxGridView> 

Все работает нормально, но я хочу объявить параметр управления с кодом:

<uc:PersonsManager ID="personsManager" runat="server" /> 

, а затем на Page_Load:

personsManager.CompanyID = 2; 

И если я использую предыдущее заявление, то я вижу только первую партию ASPxGridView UserControl с некоторыми данными, потому что любая манипуляция приведет к ошибке на HtmlRowCreated события из UserControl в ASPxGridView:

Выбрать операция не поддерживается от ObjectDataSource 'dsPersons', если указан параметр SelectMethod.

Почему это происходит?

Спасибо.

ответ

0

Когда вы добавляете источник данных объекта, вам предоставляется мастер, который позволяет выбирать метадомы на вашем объекте, которые поддерживают типичные методы CRUD базы данных.

Нажмите smarttag вашего объекта DataSource и выберите «configure datasource», и вы увидите.

ТОГДА посмотрите на http://msdn.microsoft.com/en-us/library/9a4kyhcx.aspx, чтобы узнать, как реализовать эти методы ..

удачи.

+0

Вы не поняли ситуацию правильно: мои методы хорошо работает, когда я установить параметр управления inline или внутри другого gridView (Bind), но он не работает, когда я устанавливаю параметр из кода (C#). Я думаю, что проблема в ASPxGridView и обратный вызов, почему Page_Load игнорируется? –

+0

Я был немного смущен, привязка происходит после загрузки страницы. Параметры по-прежнему установлены в разметке, не так ли? и вы хотите их переопределить? вам, возможно, придется обрабатывать onselect или выбрать или любой метод и построить его самостоятельно, чтобы обойти это. снова, я смутно вспоминаю, но я знаю, что был там не один раз ... –

+0

Хм ...У меня есть настраиваемый элемент управления на странице (ничего больше). UserControl имеет gridView и dataSource с методом select, который зависит от общедоступного параметра управления. Если я установлю этот параметр в разметке, тогда все будет работать нормально, но если я хочу динамически установить этот параметр из кода, я получаю сообщение об ошибке при любых манипуляциях с данными в gridView элемента управления пользователя. –

0

Посмотрите на это сообщение в блоге "Manually Set ObjectDataSource.SelectMethod Property BUG" от Eran Nachum. Он описывает, как вы должны установить источник данных сетки во время события OnInit, а затем выполнить привязку данных во время OnPreRender. не

(На сайте указано выше, больше не является активным Существует копия блога на Вайбак машины:. Eran Nachum's Blog from December 2007 in the wayback machine)

+2

Предоставленный url мертв :( – breez

+1

Да, к сожалению, так. К счастью, похоже, что машина обратного пути взяла копию. Я обновлю ответ с URL-адресом на страницу, которая начинается с сообщения в блоге. –

Смежные вопросы