连接两个ObjectDataSources [英] connect two ObjectDataSources

查看:94
本文介绍了连接两个ObjectDataSources的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要连接两个ObjectDataSource标记.
第一个具有查询字符串参数,第二个具有参数,这是第一个结果集中的字段之一.这种关系是一对一的,所以我不能将第二个放在网格中并使用控制参数

I need to connect two ObjectDataSource tags.
First will have a query string parameter and the second has a parameter, which is one of the fields in the result set of the first one. The relationship is one-to-one, so I can''t put second one in a grid and use control parameter

<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之前被调用.

感谢您的帮助.


This does not work because AdvertiserObjectDataSource_OnSelecting is called before OrderObjectDataSource_OnSelected.

Thanks for your help.

推荐答案

让它正常工作,这是我已经完成的工作:

got it working, here is what I''ve done:

<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;
}


这篇关于连接两个ObjectDataSources的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆