соединить два ObjectDataSources - PullRequest
       4

соединить два ObjectDataSources

1 голос
/ 26 октября 2010

Мне нужно соединить два тега ObjectDataSource. Первый будет иметь параметр строки запроса, а второй - параметр, который является одним из полей в наборе результатов первого. Соотношение один к одному, поэтому я не могу поместить второго в сетку и использовать управляющий параметр

<asp:ObjectDataSource ID="OrderObjectDataSource" runat="server" 
    SelectMethod="GetById" 
    TypeName=" MyProject.Business.Repositories.OrderRepository"
    OnSelected="OrderObjectDataSource_OnSelected">
    <SelectParameters>
        <asp:QueryStringParameter DefaultValue="86" Name="orderId" 
            QueryStringField="ioid" Type="Int32" />
    </SelectParameters>
    </asp:ObjectDataSource>
<asp:ObjectDataSource runat="server" ID="AdvertiserObjectDataSource"
     TypeName="MyProject.Business.Repositories.AdvertiserRepository"
     SelectMethod="GetAdvertiserById"
     OnSelecting="AdvertiserObjectDataSource_OnSelecting">
    <SelectParameters>
        <asp:Parameter Name="advertiserId" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>
</asp:Content>


    private Order _order;
    protected void OrderObjectDataSource_OnSelected(object source, ObjectDataSourceStatusEventArgs e)
    {
        if (e.ReturnValue != null)
        {
            _order = (Order) e.ReturnValue;
            AdvertiserObjectDataSource.SelectParameters["advertiserId"].DefaultValue =
                        _order.AdvertiserId.ToString();
            AdvertiserObjectDataSource.Select();
        }
    }

    protected void AdvertiserObjectDataSource_OnSelecting(object source, ObjectDataSourceSelectingEventArgs e)
    {
        if (_order != null)
            e.InputParameters["advertiserId"] = _order.AdvertiserId;
    }

Это не работает, потому что AdvertiserObjectDataSource_OnSelecting вызывается перед OrderObjectDataSource_OnSelected.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 26 октября 2010

Только что все заработало, вот что я сделал:

<asp:ObjectDataSource ID="OrderObjectDataSource" runat="server"/>
<asp:ObjectDataSource runat="server" ID="AdvertiserObjectDataSource" />

private Order _order;

protected void Page_Load(object sender, EventArgs e)
{
     OrderObjectDataSource.TypeName = "MyProject.Business.Repositories.OrderRepository";
     OrderObjectDataSource.SelectMethod = "GetById";
     OrderObjectDataSource.SelectParameters.Clear();
     OrderObjectDataSource.SelectParameters.Add(new QueryStringParameter("orderId", 
                                                    DbType.Int32, Proposal_Id_QS_Key));
     OrderObjectDataSource.Selected += OrderObjectDataSource_OnSelected;    
     AdvertiserObjectDataSource.TypeName = "MyProject.Business.Repositories.AdvertiserRepository";
     AdvertiserObjectDataSource.SelectMethod = "GetAdvertiserById";
     AdvertiserObjectDataSource.SelectParameters.Clear();
     AdvertiserObjectDataSource.SelectParameters.Add(new Parameter("advertiserId", DbType.Int32));
     AdvertiserObjectDataSource.Selecting += AdvertiserObjectDataSource_OnSelecting;

     OrderObjectDataSource.Select();
}


protected void OrderObjectDataSource_OnSelected(object source, ObjectDataSourceStatusEventArgs e)
{
     if (e.ReturnValue != null)
     {
         _order = (Order) e.ReturnValue;
         AdvertiserObjectDataSource.SelectParameters["advertiserId"].DefaultValue =
         _order.AdvertiserId.ToString();
         AdvertiserObjectDataSource.Select();
      }
}


protected void AdvertiserObjectDataSource_OnSelecting(object source, ObjectDataSourceSelectingEventArgs e)
{
     if (_order != null)
          e.InputParameters["advertiserId"] = _order.AdvertiserId;
}
...