SL 3 多表数据显示

本示例是一个关系SL 3 三张表数据的显示问题,运行结果如下所示:


表关系如下图所示:

 
这些数据的显示都是通过调用后台服务WCF,支持数据显示;

后台服务代码如下所示:

[ServiceContract(Namespace = "对外提供数据服务")]
   [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
   public class DataServices
   {

       // 在此处添加更多操作并使用 [OperationContract] 标记它们

       [OperationContract]
       public List<Customers> GetCustomerAll()
       {
           MyDataDataContext db = new MyDataDataContext();

           return db.Customers.ToList();
       }

       [OperationContract]
       public List<Customers> GetCustomerByID(string CustomerID)
       {
           MyDataDataContext db = new MyDataDataContext();
           var query = from customer in db.Customers
                       where customer.CustomerID == CustomerID
                       select customer;
           return query.ToList();
       }

       [OperationContract]
       public List<Orders> GetOrders(string customerID)
       {
           MyDataDataContext datacontext = new MyDataDataContext();
           return (from order in datacontext.Orders
                   where order.CustomerID == customerID
                   select order).ToList();
       }

       [OperationContract]
       public List<Order_Details> GetOrderDetails(int orderID)
       {
           MyDataDataContext datacontext = new MyDataDataContext();
           return (from orderdetail in datacontext.Order_Details
                   where orderdetail.OrderID == orderID
                   select orderdetail).ToList();
       }

   }
后台调用WCF服务代码如下:
DataServiceClient.DataServicesClient svc = new DataServiceClient.DataServicesClient();
       public MainPage()
       {
           InitializeComponent();
       }
       private void lstCustomers_Loaded(object sender, RoutedEventArgs e)
       {
           this.txtStatus.Text = "Loading customers...";
           svc.GetCustomerAllCompleted += new EventHandler<GetCustomerAllCompletedEventArgs>
(svc_GetCustomerAllCompleted);
           svc.GetCustomerAllAsync();
       }
       void svc_GetCustomerAllCompleted(object sender, GetCustomerAllCompletedEventArgs e)
       {
           if (e.Error == null)
           {
               this.lstCustomers.ItemsSource = e.Result;
               this.txtStatus.Text = string.Empty;
           }
           else
           {
               this.txtStatus.Text =
                   "Error occurred while loading customers from database";
           }
       }
       private void lstCustomers_SelectionChanged(object sender, SelectionChangedEventArgs e)
       {

           CAL.SLData.DataServiceClient.Customers selectedCustomer = this.lstCustomers.SelectedItem 
as CAL.SLData.DataServiceClient.Customers;
           {

               this.txtStatus.Text = "Loading orders...";
               svc.GetOrdersCompleted +=
                   delegate(object eventSender, GetOrdersCompletedEventArgs eventArgs)
                   {
                       if (eventArgs.Error == null)
                       {
                           this.dgOrders.ItemsSource = eventArgs.Result;
                           this.txtStatus.Text = string.Empty;
                       }
                       else
                       {
                           this.txtStatus.Text =
                               "Error occurred while loading orders from database";
                       }
                   };
               svc.GetOrdersAsync(selectedCustomer.CustomerID);
           }
       }
       private void dgOrders_SelectionChanged(object sender, EventArgs e)
       {

           CAL.SLData.DataServiceClient.Orders selectedOrder = this.dgOrders.SelectedItem as Orders;
           if (selectedOrder != null)
           {

               this.txtStatus.Text = "Loading order details...";
               svc.GetOrderDetailsCompleted +=
                   (eventSender, eventArgs) =>
                   {
                       if (eventArgs.Error == null)
                       {
                           this.dgOrderDetails.ItemsSource = eventArgs.Result;
                           this.txtStatus.Text = string.Empty;
                       }
                       else
                       {
                           this.txtStatus.Text =
                               "Error occurred while loading order details from database";
                       }
                   };
               svc.GetOrderDetailsAsync(selectedOrder.OrderID);
           }
       }


       private void dgOrderDetails_AutoGeneratingColumn(object sender,
 DataGridAutoGeneratingColumnEventArgs e)
       {
           if (e.Column.Header.ToString() == "OrderID")
               e.Column.Visibility = Visibility.Collapsed;
       }
UI 页面代码如下所示:
 
<Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="55" x:Name="HeaderRow" />
            <RowDefinition Height="*" x:Name="ContentRow"/>
            <RowDefinition Height="20" x:Name="FooterRow"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <!-- Heading -->
        <TextBlock x:Name="txtHeader" Grid.Row="0" 
                   FontSize="20" Margin="5,5" Foreground="Blue"
                   Text="My First Data Application in Silverlight">
        </TextBlock>

        <!-- A textblock in the footer to be used as an Status bar -->
        <TextBlock x:Name="txtStatus" Grid.Row="2" 
               FontSize="10" Margin="5,0" Foreground="Red">
        </TextBlock>

        <!-- Content Holder -->
        <Grid x:Name="ContentGrid" Grid.Row="1" Margin="5">
            <Grid.RowDefinitions>
                <RowDefinition Height=".6*" />
                <RowDefinition Height=".4*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="200" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <!-- Listbox for displaying customers -->
            <ListBox x:Name="lstCustomers" Grid.Column="0" Grid.RowSpan="2"
                     DisplayMemberPath="ContactName"
                     Loaded="lstCustomers_Loaded"
                     SelectionChanged="lstCustomers_SelectionChanged">
            </ListBox>

            <!-- DataGrid for displaying orders of a customer 
                (with autogenerated columns) -->
            <data:DataGrid x:Name="dgOrders" Grid.Row="0" Grid.Column="1" 
                           AutoGenerateColumns="True"
                           SelectionChanged="dgOrders_SelectionChanged">
            </data:DataGrid>

            <!-- DataGrid for displaying orderdetais for an order -->
            <data:DataGrid x:Name="dgOrderDetails" Grid.Row="1" Grid.Column="1" 
                           AutoGenerateColumns="True"
                           AutoGeneratingColumn="dgOrderDetails_AutoGeneratingColumn">
            </data:DataGrid>

        </Grid>

    </Grid>
 
posted @ 2009-09-14 20:51  阳光追梦  阅读(809)  评论(0编辑  收藏  举报
/*快速评论*/ #div_digg { position: fixed; bottom: 10px; right: 15px; border: 2px solid #ECD7B1; padding: 10px; width: 140px; background-color: #fff; border-radius: 5px 5px 5px 5px !important; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); } /** 不知道为什么页面加载完成时还读不到div_digg。可能也是动态生成的。 所以这里只能用定时器 不断的读取,当读取到了再给它动态添加快捷按钮 **/ //自定义 定时器[当元素加载完成是执行回调函数] function customTimer(inpId,fn) { if ($(inpId).length) { fn(); } else { var intervalId = setInterval(function () { if ($(inpId).length) { //如果存在了 clearInterval(intervalId); // 则关闭定时器 customTimer(inpId,fn); //执行自身 } }, 100); } } //页面加载完成是执行 $(function () { customTimer("#div_digg", function () { var div_html = "
\ 关注\  | \ 顶部\  | \ 评论\
"; $("#div_digg").append(div_html); //tbCommentBody }); });