C# Maui ListView 實作Select Item 改變顏色 [VisualState + Event Function]

C# Maui ListView 實作Select Item 改變顏色 [VisualState + Event Function]

C# Maui ListView 實作Select Item 改變顏色 [VisualState + Event Function]


資料來源: 公司專案(起因:因為VisualStateGroupList對於Selected 事件無反應)


MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:VPOS.CustomControls"
             x:Class="VPOS.MainPage"
             Background="#194a6e"
             Title=""><!-- 隱藏標題 -->
    
    <ContentPage.Resources> <!-- https://learn.microsoft.com/en-us/dotnet/maui/user-interface/controls/collectionview/selection -->
        <Style TargetType="Grid">
            <Setter Property="VisualStateManager.VisualStateGroups">
                <VisualStateGroupList>
                    <VisualStateGroup x:Name="CommonStates">
                        <VisualState x:Name="Normal" />
                        <VisualState x:Name="Selected">
                            <VisualState.Setters>
                                <Setter Property="BackgroundColor" 
                                        Value="#FF0000" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateGroupList>
            </Setter>
        </Style>
    </ContentPage.Resources>

    <Grid x:Name="FullGrid"
          Padding="3"
          RowSpacing="2" ColumnSpacing="2" >
        <Grid.RowDefinitions>
            <RowDefinition /><!--Workspace -->
            <RowDefinition Height="40" /><!--status column -->
        </Grid.RowDefinitions>

        <Grid x:Name="WorkspaceGrid"
              RowSpacing="2" ColumnSpacing="2"
               Grid.Row="0" Grid.Column="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50"/><!-- Menu -->
                <ColumnDefinition /><!-- Content -->
            </Grid.ColumnDefinitions>

            <Grid x:Name="MenuGrid"
                  RowSpacing="2" ColumnSpacing="2"
                  Grid.Row="0" Grid.Column="0">
                <Border x:Name="MenuBorder"
                        Stroke="#194a6e"
                        StrokeThickness="0"
                        Background="#194a6e">
                    <Border.StrokeShape>
                        <RoundRectangle CornerRadius="5" />
                    </Border.StrokeShape>

                    <VerticalStackLayout Spacing="5">
                        <ImageButton x:Name="SettingsBtn"
                                BorderColor="White"
                                BorderWidth="2"
                                CornerRadius="5"
                                BackgroundColor="#194a6e"
                                Source = "settings.png"
                                Clicked="SettingsBtn_Clicked"
                                HorizontalOptions="Fill"
                                VerticalOptions="Fill">
                        </ImageButton>

                        <ImageButton x:Name="DevicesBtn"
                                BorderColor="White"
                                BorderWidth="2"
                                CornerRadius="5"
                                BackgroundColor="#194a6e"
                                Source = "device.png"
                                Clicked="DevicesBtn_Clicked"
                                HorizontalOptions="Fill"
                                VerticalOptions="Fill">
                        </ImageButton>

                        <ImageButton x:Name="SynchronizeBtn"
                                BorderColor="White"
                                BorderWidth="2"
                                CornerRadius="5"
                                BackgroundColor="#194a6e"
                                Source = "synchronize.png"
                                Clicked="SynchronizeBtn_Clicked"
                                HorizontalOptions="Fill"
                                VerticalOptions="Fill">
                        </ImageButton>

                        <ImageButton x:Name="LogoutBtn"
                                BorderColor="White"
                                BorderWidth="2"
                                CornerRadius="5"
                                BackgroundColor="#194a6e"
                                Source = "logout.png"
                                Clicked="LogoutBtn_Clicked"
                                HorizontalOptions="Fill"
                                VerticalOptions="Fill">
                        </ImageButton>
                    </VerticalStackLayout>
                    
                 </Border><!--MenuBorder-->
            </Grid><!--MenuGrid-->

            <Grid x:Name="ContentGrid"
                  RowSpacing="2" ColumnSpacing="2"
                  Grid.Row="0" Grid.Column="1"
                  ColumnDefinitions="5.2*,0.8*,6*">

                <Border x:Name="LeftContentBorder"
                        Grid.Row="0" Grid.Column="0"
                        Stroke="White"
                        StrokeThickness="1"
                        Background="#194a6e">
                    <Border.StrokeShape>
                        <RoundRectangle CornerRadius="5" />
                    </Border.StrokeShape>
                    
                    <Grid x:Name="LeftContentGrid"
                          RowDefinitions="3.5*,5.5*,2*">

                        <Border x:Name="LeftContentBorder00"
                                Grid.Row="0" Grid.Column="0"
                                Stroke="#194a6e"
                                StrokeThickness="1"
                                Background="White">
                                    <Border.StrokeShape>
                                        <RoundRectangle CornerRadius="5" />
                                    </Border.StrokeShape>
                                <Grid x:Name="ShowInfoGrid"
                                      RowDefinitions="1.3*,1.2*,*">
                                    <Grid x:Name="ShowInfoGrid00"
                                            Margin="4,0"
                                            RowSpacing="0" ColumnSpacing="0"
                                            Grid.Row="0" Grid.Column="0"
                                            RowDefinitions="0.4*,0.3*,0.3*"
                                            ColumnDefinitions="*,*,*,*,*,*" IsEnabled="True">
                                    <Label x:Name="OrderStatusLable"
                                           Grid.Row="0" Grid.ColumnSpan="6" 
                                           Text="訂購中"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Large"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Center"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                        
                                    <Label x:Name="QuantityTextLable"
                                           Grid.Row="1" Grid.Column="0" 
                                           Text="商品數量:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="QuantityValueLable"
                                           Grid.Row="1" Grid.Column="1" 
                                           Text="10000"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Medium"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="DiscountTextLable"
                                           Grid.Row="1" Grid.Column="2" 
                                           Text="優惠金額:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="DiscountValueLable"
                                           Grid.Row="1" Grid.Column="3" 
                                           Text="10000"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Medium"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="ServiceTextLable"
                                           Grid.Row="1" Grid.Column="4" 
                                           Text="服務費:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="ServiceValueLable"
                                           Grid.Row="1" Grid.Column="5" 
                                           Text="10000"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Medium"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>

                                    <Label x:Name="ReceivableTextLable"
                                           Grid.Row="2" Grid.Column="0" 
                                           Text="應收總額:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="ReceivableValueLable"
                                           Grid.Row="2" Grid.Column="1" 
                                           Text="30000"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Medium"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="ChangeTextLable"
                                           Grid.Row="2" Grid.Column="2" 
                                           Text="找零金額:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="ChangeValueLable"
                                           Grid.Row="2" Grid.Column="3" 
                                           Text="10000"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Medium"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>

                                </Grid>
                                <Grid x:Name="ShowInfoGrid01"
                                            Margin="4,0"
                                            RowSpacing="0" ColumnSpacing="0"
                                            Grid.Row="1" Grid.Column="0"
                                            RowDefinitions="2,*,*,*"
                                            ColumnDefinitions="1.09*,1.99*,1.09*,1.5*,0.9*,0.6*">

                                    <Border x:Name="ShowInfoLine00"
                                        Grid.Row="0" Grid.ColumnSpan="6"
                                        Stroke="Black"
                                        StrokeThickness="0.5"/>
                                        
                                    <Label x:Name="OrderNoTextLable"
                                           Grid.Row="1" Grid.Column="0" 
                                           Text="訂單編號:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="OrderNoValueLable"
                                           Grid.Row="1" Grid.Column="1" 
                                           Text="20230927-0001"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Center"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="PickupNoTextLable"
                                           Grid.Row="1" Grid.Column="2" 
                                           Text="取餐號:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="PickupNoValueLable"
                                           Grid.Row="1" Grid.Column="3" 
                                           Text="00000001"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="VisitorsTextLable"
                                           Grid.Row="1" Grid.Column="4" 
                                           Text="來客數:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="VisitorsValueLable"
                                           Grid.Row="1" Grid.Column="5" 
                                           Text="0001"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Center"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>

                                    <Label x:Name="OrderTypeTextLable"
                                           Grid.Row="2" Grid.Column="0" 
                                           Text="訂單類型:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="OrderTypeValueLable"
                                           Grid.Row="2" Grid.Column="1" 
                                           Text="Uber Eats"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Center"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="TableNoTextLable"
                                           Grid.Row="2" Grid.Column="2" 
                                           Text="桌號:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="TableNoValueLable"
                                           Grid.Row="2" Grid.Column="3" 
                                           Text="豪華廳A0001"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="ShopNoTextLable"
                                           Grid.Row="2" Grid.Column="4" 
                                           Text="牌號:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="ShopNoValueLable"
                                           Grid.Row="2" Grid.Column="5" 
                                           Text="100"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Center"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>

                                    <Label x:Name="MemberNameTextLable"
                                           Grid.Row="3" Grid.Column="0" 
                                           Text="會員名稱:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="MemberNameValueLable"
                                           Grid.Row="3" Grid.Column="1" 
                                           Text="合用系統有限公司"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Center"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="MemberTelTextLable"
                                           Grid.Row="3" Grid.Column="2" 
                                           Text="會員電話:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="MemberTelValueLable"
                                           Grid.Row="3" Grid.Column="3" 
                                           Text="04-22216292"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Center"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>

                                </Grid>
                                <Grid x:Name="ShowInfoGrid02"
                                            Margin="4,0"
                                            RowSpacing="1" ColumnSpacing="0"
                                            Grid.Row="2" Grid.Column="0"
                                            RowDefinitions="2,*,*"
                                            ColumnDefinitions="1*,1.3*,0.6*,1.31*,1.19*,0.6*">

                                    <Border x:Name="ShowInfoLine01" 
                                        Grid.Row="0" Grid.ColumnSpan="6"
                                        Stroke="Black"
                                        StrokeThickness="0.5"/>

                                    <Label x:Name="InvoiceNoTextLable"
                                           Grid.Row="1" Grid.Column="0" 
                                           Text="發票號碼:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="InvoiceNoValueLable"
                                           Grid.Row="1" Grid.Column="1" 
                                           Text="AB14433816"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>

                                    <local:CustBtn x:Name="InvoiceNoBtn"
                                                Grid.Row="1" Grid.Column="2" Grid.RowSpan="2"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>

                                    <Label x:Name="InvoiceCountTextLable"
                                           Grid.Row="1" Grid.Column="3" 
                                           Text="發票剩餘張數:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="InvoiceCountValueLable"
                                           Grid.Row="1" Grid.Column="4" 
                                           Text="100"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Center"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>

                                    <local:CustBtn x:Name="CarrierBtn"
                                                Grid.Row="1" Grid.Column="5" Grid.RowSpan="2"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>

                                    <Label x:Name="TaxIDTextLable"
                                           Grid.Row="2" Grid.Column="0" 
                                           Text="客戶統編:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="TaxIDValueLable"
                                           Grid.Row="2" Grid.Column="1" 
                                           Text="42897648"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Small"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>

                                    <Label x:Name="CarrierTextLable"
                                           Grid.Row="2" Grid.Column="3" 
                                           Text="發票載具:"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Default"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                    <Label x:Name="CarrierValueLable"
                                           Grid.Row="2" Grid.Column="4" 
                                           Text="/RZDFEP2"
                                           LineBreakMode="WordWrap"
                                           TextColor="Black"
                                           FontSize="Micro"
                                           FontAutoScalingEnabled="True"
                                           VerticalTextAlignment="Center"
                                           HorizontalTextAlignment="Start"
                                           BackgroundColor="Transparent"
                                           HorizontalOptions="Fill"
                                           VerticalOptions="Fill"/>
                                </Grid>

                            </Grid><!--ShowInforGrid-->
                        </Border><!--LeftContentBorder00-->

                        <Border x:Name="LeftContentBorder01"
                        Grid.Row="1" Grid.Column="0"
                        Stroke="#194a6e"
                        StrokeThickness="1"
                        Background="White">
                            <Border.StrokeShape>
                                <RoundRectangle CornerRadius="5" />
                            </Border.StrokeShape>

                            <Grid x:Name="ShopcartGrid"
                                  RowSpacing="2" ColumnSpacing="2"
                                  ColumnDefinitions="5.2*,0.8*">
                                <Grid x:Name="ShopcartMainGrid"
                                    Grid.Row="0" Grid.Column="0"
                                    RowDefinitions="*" ColumnDefinitions="*">
                                    <ListView x:Name="ShopcartListView"
                                              Grid.Row="0" Grid.Column="0"
                                              SelectionMode="Single"
                                              BackgroundColor="White"
                                              IsPullToRefreshEnabled="True" IsRefreshing="True"
                                              VerticalScrollBarVisibility="Never"
                                              ItemSelected="ShopcartListView_ItemSelected">
                                        <ListView.ItemTemplate>
                                            <DataTemplate>
                                                <ViewCell>
                                                    <!-- ListView 資料結構標準: ListView.ItemTemplate -> DataTemplate -> ViewCell-->
                                                    <Grid BackgroundColor="{Binding BColor}" ColumnDefinitions="30,15,4.6*,0.5*,1*,1.2*" Margin="8,0,7,0">
                                                        <VisualStateManager.VisualStateGroups>
                                                            <VisualStateGroupList>
                                                                <VisualStateGroup x:Name="CommonStates">
                                                                    <VisualState x:Name="Normal"/>
                                                                    <VisualState x:Name="PointerOver">
                                                                        <VisualState.Setters>
                                                                            <Setter Property="BackgroundColor" Value="White" />
                                                                        </VisualState.Setters>
                                                                    </VisualState>
                                                                    <VisualState x:Name="Selected">
                                                                        <VisualState.Setters>
                                                                            <Setter Property="BackgroundColor" Value="Red" />
                                                                        </VisualState.Setters>
                                                                    </VisualState>
                                                                </VisualStateGroup>
                                                            </VisualStateGroupList>
                                                        </VisualStateManager.VisualStateGroups>
                                                        <Image Source="{Binding Image00}" WidthRequest="20" HeightRequest="20" Grid.Column="0" >
                                                            <Image.GestureRecognizers>
                                                                <TapGestureRecognizer Tapped="ShopcartListViewImage00_Clicked" />
                                                            </Image.GestureRecognizers>
                                                        </Image>
                                                        <Image Source="{Binding Image01}" WidthRequest="10" HeightRequest="10" Grid.Column="1" >
                                                            <Image.GestureRecognizers>
                                                                <TapGestureRecognizer Tapped="ShopcartListViewImage01_Clicked" />
                                                            </Image.GestureRecognizers>
                                                        </Image>
                                                        <Label Text="{Binding Name}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="2" />
                                                        <Label Text="{Binding Amount}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="3" />
                                                        <Label Text="{Binding Price}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="4" />
                                                        <Label Text="{Binding Sum}"  FontSize="{Binding Font_Size}" FontAutoScalingEnabled="True" HorizontalTextAlignment="End" VerticalTextAlignment="Center" TextColor="{Binding Font_Color}" Grid.Column="5" />
                                                    </Grid>
                                                </ViewCell>
                                            </DataTemplate>
                                        </ListView.ItemTemplate>
                                    </ListView>
                                </Grid>
                                <Border x:Name="ShopcartBtnBorder"
                                        Grid.Row="0" Grid.Column="1" 
                                        Stroke="White"
                                        StrokeThickness="1"
                                        Background="#194a6e">
                                    <Border.StrokeShape>
                                        <RoundRectangle CornerRadius="5" />
                                    </Border.StrokeShape>
                                    
                                    <VerticalStackLayout 
                                        x:Name="ShopcartBtnVertical" 
                                        Padding="3" Spacing="10">
                                        <local:CustBtn x:Name="ModifiedBtn"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Center">
                                        </local:CustBtn>

                                        <local:CustBtn x:Name="PlusBtn"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Center">
                                        </local:CustBtn>

                                        <local:CustBtn x:Name="MinusBtn"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Center">
                                        </local:CustBtn>
                                    </VerticalStackLayout>
                                    
                                </Border>



                            </Grid><!--ShopcartGrid-->   
                            
                        </Border><!--LeftContentBorder01-->

                        <Border x:Name="LeftContentBorder02"
                                Grid.Row="2" Grid.Column="0"
                                Stroke="#194a6e"
                                StrokeThickness="1"
                                Background="White">
                                <Border.StrokeShape>
                                    <RoundRectangle CornerRadius="5" />
                                </Border.StrokeShape>
                            <Grid x:Name="ShopcartBtnGrid"
                                  Margin="1,2"
	                              RowSpacing="1" ColumnSpacing="1"
	                              RowDefinitions="*,*"
	                              ColumnDefinitions="*,*,*,*,*">
                                <local:CustBtn x:Name="ShopcartBtn00"
                                                Grid.Row="0" Grid.Column="0"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                <local:CustBtn x:Name="ShopcartBtn01"
                                                Grid.Row="0" Grid.Column="1"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                <local:CustBtn x:Name="ShopcartBtn02"
                                                Grid.Row="0" Grid.Column="2"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                <local:CustBtn x:Name="ShopcartBtn03"
                                                Grid.Row="0" Grid.Column="3"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                <local:CustBtn x:Name="ShopcartBtn04"
                                                Grid.Row="0" Grid.Column="4" Grid.RowSpan="2"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                <local:CustBtn x:Name="ShopcartBtn05"
                                                Grid.Row="1" Grid.Column="0"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                <local:CustBtn x:Name="ShopcartBtn06"
                                                Grid.Row="1" Grid.Column="1"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                <local:CustBtn x:Name="ShopcartBtn07"
                                                Grid.Row="1" Grid.Column="2"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                <local:CustBtn x:Name="ShopcartBtn08"
                                                Grid.Row="1" Grid.Column="3"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                            </Grid>
                        </Border><!--LeftContentBorder02-->  
                        
                    </Grid><!--LeftContentGrid-->

                </Border><!--LeftContentBorder-->

                <Border x:Name="MiddleContentBorder"
                        Grid.Row="0" Grid.Column="1"
                        Stroke="White"
                        StrokeThickness="1"
                        Background="#194a6e">
                    <Border.StrokeShape>
                        <RoundRectangle CornerRadius="5" />
                    </Border.StrokeShape>
                    <VerticalStackLayout x:Name="MiddleVerticalStackLayout" 
                                         Spacing="5" Margin="5,10,5,10">
                    </VerticalStackLayout>
                </Border><!--MiddleContentBorder-->

                <Border x:Name="RightContentBorder"
                        Grid.Row="0" Grid.Column="2"
                        Stroke="White"
                        StrokeThickness="1"
                        Background="#194a6e">
                    <Border.StrokeShape>
                        <RoundRectangle CornerRadius="5" />
                    </Border.StrokeShape>

                    <Grid x:Name="RightContentGrid"
                          RowSpacing="2" ColumnSpacing="2"
                          RowDefinitions="2*,7*,2*">

                        <Border x:Name="RightContentBorder00"
                                Grid.Row="0" Grid.Column="0"
                                Stroke="#194a6e"
                                StrokeThickness="1"
                                Background="White">
                                <Border.StrokeShape>
                                    <RoundRectangle CornerRadius="5" />
                                </Border.StrokeShape>
                            
                            <Grid x:Name="CategoryBtnGrid"
	                              ColumnDefinitions="5*,0.5*">
                                <Border x:Name="CategoryBtnBorder01"
		                                Grid.Row="0" Grid.Column="1" 
		                                Stroke="White"
		                                StrokeThickness="1"
		                                Background="#194a6e">
                                        <Border.StrokeShape>
                                            <RoundRectangle CornerRadius="5" />
                                        </Border.StrokeShape>
                                    <Grid RowDefinitions="*,0.85*,*" Margin="0,3,0,3">
                                        <local:CustBtn x:Name="CategoryUpBtn"
                                                Grid.Row="0" Grid.Column="0"
                                                HorizontalOptions="Center"
                                                VerticalOptions="Start">
                                        </local:CustBtn>
                                        <Label x:Name="CategoryTextLable"
                                                Grid.Row="1" Grid.Column="0" 
                                                Text="1/2"
                                                LineBreakMode="WordWrap"
                                                TextColor="White"
                                                FontSize="Default"
                                                FontAutoScalingEnabled="True"
                                                VerticalTextAlignment="Center"
                                                HorizontalTextAlignment="Center"
                                                BackgroundColor="Transparent"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                        <local:CustBtn x:Name="CategoryDownBtn"
                                                Grid.Row="2" Grid.Column="0"
                                                HorizontalOptions="Center"
                                                VerticalOptions="End">
                                        </local:CustBtn>                                        
                                    </Grid>

                                </Border>
                            </Grid>
                        </Border><!--RightContentBorder00-->

                        <Border x:Name="RightContentBorder01"
                                Grid.Row="1" Grid.Column="0"
                                Stroke="#194a6e"
                                StrokeThickness="1"
                                Background="White">
                                <Border.StrokeShape>
                                    <RoundRectangle CornerRadius="5" />
                                </Border.StrokeShape>
                            
                            <Grid x:Name="ProductBtnGrid"
	                              ColumnDefinitions="5*,0.5*">
                                <Border x:Name="ProductBtnBorder01"
		                                Grid.Row="0" Grid.Column="1" 
		                                Stroke="White"
		                                StrokeThickness="1"
		                                Background="#194a6e">
                                    <Border.StrokeShape>
                                        <RoundRectangle CornerRadius="5" />
                                    </Border.StrokeShape>

                                    <Grid RowDefinitions="*,0.3*,*">
                                        <local:CustBtn x:Name="ProductUpBtn"
                                                Grid.Row="0" Grid.Column="0"
                                                HorizontalOptions="Center"
                                                VerticalOptions="End">
                                        </local:CustBtn>
                                        <Label x:Name="ProductTextLable"
                                                Grid.Row="1" Grid.Column="0" 
                                                Text="1/2"
                                                LineBreakMode="WordWrap"
                                                TextColor="White"
                                                FontSize="Default"
                                                FontAutoScalingEnabled="True"
                                                VerticalTextAlignment="Center"
                                                HorizontalTextAlignment="Center"
                                                BackgroundColor="Transparent"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                        <local:CustBtn x:Name="ProductDownBtn"
                                                Grid.Row="2" Grid.Column="0"
                                                HorizontalOptions="Center"
                                                VerticalOptions="Start">
                                        </local:CustBtn>
                                    </Grid>
                                </Border>
                            </Grid>
                        </Border><!--RightContentBorder01-->

                        <Border x:Name="RightContentBorder02"
                                Grid.Row="2" Grid.Column="0"
                                Stroke="#194a6e"
                                StrokeThickness="1"
                                Background="White">
                                <Border.StrokeShape>
                                    <RoundRectangle CornerRadius="5" />
                                </Border.StrokeShape>

                            <Grid x:Name="CondimentBtnGrid"
	                              ColumnDefinitions="5*,0.5*">
                                <Border x:Name="CondimentBtnBorder01"
		                                Grid.Row="0" Grid.Column="1" 
		                                Stroke="White"
		                                StrokeThickness="1"
		                                Background="#194a6e">
                                    <Border.StrokeShape>
                                        <RoundRectangle CornerRadius="5" />
                                    </Border.StrokeShape>

                                    <Grid RowDefinitions="*,0.85*,*" Margin="0,3,0,3">
                                        <local:CustBtn x:Name="CondimentUpBtn"
                                                Grid.Row="0" Grid.Column="0"
                                                HorizontalOptions="Center"
                                                VerticalOptions="Start">
                                        </local:CustBtn>
                                        <Label x:Name="CondimentTextLable"
                                                Grid.Row="1" Grid.Column="0" 
                                                Text="1/2"
                                                LineBreakMode="WordWrap"
                                                TextColor="White"
                                                FontSize="Default"
                                                FontAutoScalingEnabled="True"
                                                VerticalTextAlignment="Center"
                                                HorizontalTextAlignment="Center"
                                                BackgroundColor="Transparent"
                                                HorizontalOptions="Fill"
                                                VerticalOptions="Fill"/>
                                        <local:CustBtn x:Name="CondimentDownBtn"
                                                Grid.Row="2" Grid.Column="0"
                                                HorizontalOptions="Center"
                                                VerticalOptions="End">
                                        </local:CustBtn>
                                    </Grid>
                                </Border>
                            </Grid>
                        </Border><!--RightContentBorder02-->      
                        
                    </Grid><!--RightContentGrid-->
                
                </Border><!--RightContentBorder-->
            
            </Grid><!--ContentGrid-->
        
        </Grid><!--WorkspaceGrid-->

        <Grid x:Name="StatusGrid"
               Grid.Row="1" Grid.Column="0">
            
            <Border x:Name="StatusBorder"
                    Stroke="White"
                    StrokeThickness="1"
                    Background="#194a6e">
                <Border.StrokeShape>
                    <RoundRectangle CornerRadius="5" />
                </Border.StrokeShape>
                
            </Border><!--StatusBorder-->
            
        </Grid><!--StatusGrid-->
        
    </Grid><!--FullGrid-->
    
</ContentPage>


MainPage.xaml.cs

using CommunityToolkit.Maui.Views;
using System.Data;
using System.Diagnostics;
using System.Reflection;
using VPOS.CustomControls;
using VPOS.Views;
using System.Collections.ObjectModel;
using Microsoft.Maui.Platform;

namespace VPOS
{
    public class ShopcartItem
    {
        public string id { get; set; }
        public string Image00 { get; set; }
        public string Image01 { get; set; }
        public string Name { get; set; }
        public string Amount { get; set; }
        public string Price { get; set; }
        public string Sum { get; set; }
        public string image_id { get; set; }
        public Color Font_Color { get; set; }
        public double Font_Size { get; set; }
        public string State { get; set; }
        public Color BColor { get; set; }
    }

    public partial class MainPage : ContentPage
    {
        private String m_StrTab = "    ";
        public static String m_StrVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;
        public static String m_StrDeviceCode = FileLib.GetDeviceCode();

        //---
        //建立購物車相關變數區
        public static ShopCart m_ShopCart = null;
        //---建立購物車相關變數區

        public static List<func_mainData> m_funcMain = new List<func_mainData>();

        //---
        //訂單號相關變數
        private int m_intOrderState = 0;//0:new,1已結帳,2暫存
        public static String m_StrPosOrderNumber = "";//紀錄訂單號的成員變數
        public static String m_StrCustEinNumber = "";//紀錄客戶統一編號
        public static String m_StrCustCarrierNumber = "";//紀錄客戶發票載具
        public static bool m_blnMobileCarrier = false;//紀錄客戶發票載具類型
        public static String m_StrEasyCardPhysicalID = "";//紀錄交易悠遊卡內碼(發票載具)
        public static String m_StrLinePayCarrierNumber = "";//紀錄LinePay的paymentSID(發票載具)
        public static int m_intClassSid = 0;
        public static String m_StrClassName = "";//紀錄顯示用的班別資訊
        public static String m_StrGuestsNumber = "0";//來客數
        public static String m_StrEmployeeNo = "";//紀錄登入帳號的employee_no值
        public static String m_StrUserAccount = "";//紀錄登入帳號的user_account值
        public static String m_StrUserSID = "";//紀錄登入帳號的user_sid值
        private const int m_intOrderNumberTestMaxCount = 50;//建立訂單號最大嘗試次數
        //---訂單號相關變數

        //---
        //建立orderButton陣列
        public order_type_data_params m_order_type_data_params = null;
        public static int m_intOrderTypeIdSelected = 0;
        public static String m_StrOrderTypeNameSelected = "";
        public static String m_StrOrderTypeCodeSelected = "";
        public static int m_intOrderTypeInvoiceState = 0;//開立發票選項 0:預設 1:暫停不開 2:詢問
        public static int m_intVTS_TOGOInvoiceState = 0;//開立發票選項 0:預設 1:暫停不開 2:詢問
        public static int m_intFOODPANDAInvoiceState = 0;//開立發票選項 0:預設 1:暫停不開 2:詢問
        public static int m_intUBER_EATSInvoiceState = 0;//開立發票選項 0:預設 1:暫停不開 2:詢問
        CustBtn[] m_OrderBtn;
        private void MiddleRowButtonInit()//中間按鈕
        {
            bool blnTakeawayOrdersButton = false;//紀錄是否顯示[外賣接單]按鈕
            m_intOrderTypeIdSelected = -1;
            m_StrOrderTypeNameSelected = "";
            m_StrOrderTypeCodeSelected = "";
            m_OrderBtn = new CustBtn[10];

            int j = 0;
            double dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));
            var tapGestureRecognizer00 = new TapGestureRecognizer();
            tapGestureRecognizer00.Tapped += OrderBtn_Click;
            
            //---
            //顯示POS訂單類型
            for (int i = 0; i < SqliteDataAccess.m_order_type_data.Count; i++)
            {
                if (SqliteDataAccess.m_order_type_data[i].display_state == "Y")
                {
                    m_OrderBtn[j] = new CustBtn();
                    m_OrderBtn[j].IsVisible = true;
                    m_OrderBtn[j].InitData(SqliteDataAccess.m_order_type_data[i].SID);
                    m_OrderBtn[j].m_intPrice = SqliteDataAccess.m_order_type_data[i].price_type_sid;
                    m_OrderBtn[j].m_StrProductCode = SqliteDataAccess.m_order_type_data[i].order_type_code;
                    m_OrderBtn[j].InitDisplay(Colors.White, new Color(204, 102, 0), new Color(255, 153, 91), SqliteDataAccess.m_order_type_data[i].type_name, dblFontSize);
                    m_OrderBtn[j].m_min_count = SqliteDataAccess.m_order_type_data[i].invoice_state;//開立發票選項 0:預設 1:暫停不開 2:詢問
                    m_OrderBtn[j].GestureRecognizers.Add(tapGestureRecognizer00);
                    MiddleVerticalStackLayout.Add(m_OrderBtn[j]);//把所有按鈕放到Layout上
                    j++;
                }


                if ((SqliteDataAccess.m_order_type_data[i].order_type_code == "UBER_EATS") || (SqliteDataAccess.m_order_type_data[i].order_type_code == "FOODPANDA"))
                {
                    blnTakeawayOrdersButton = true;//紀錄是否顯示[外賣接單]按鈕
                    if (SqliteDataAccess.m_order_type_data[i].order_type_code == "UBER_EATS")
                    {
                        m_intUBER_EATSInvoiceState = SqliteDataAccess.m_order_type_data[i].invoice_state;//開立發票選項 0:預設 1:暫停不開 2:詢問
                    }
                    if (SqliteDataAccess.m_order_type_data[i].order_type_code == "FOODPANDA")
                    {
                        m_intFOODPANDAInvoiceState = SqliteDataAccess.m_order_type_data[i].invoice_state;//開立發票選項 0:預設 1:暫停不開 2:詢問
                    }
                }
                else if ((SqliteDataAccess.m_order_type_data[i].order_type_code == "VTS-TOGO"))
                {
                    m_intVTS_TOGOInvoiceState = SqliteDataAccess.m_order_type_data[i].invoice_state;//開立發票選項 0:預設 1:暫停不開 2:詢問
                }


            }
            //---顯示POS訂單類型

            //---
            //顯示外接平台訂單類型
            if (SQLDataTableModel.m_takeaways_params != null)
            {
                for (int i = 0; i < SQLDataTableModel.m_takeaways_params.Rows.Count; i++)
                {
                    switch (SQLDataTableModel.m_takeaways_params.Rows[i]["SID"].ToString())
                    {
                        case "VTSTORE":
                            /* jash stop
                            m_OrderBtn[j].Visible = true;
                            m_OrderBtn[j].m_intSID = -1;
                            m_OrderBtn[j].m_intPrice = -2;
                            m_OrderBtn[j].m_StrProductCode = SQLDataTableModel.m_takeaways_params.Rows[i]["SID"].ToString();
                            m_OrderBtn[j].Text = "";// SQLDataTableModel.m_takeaways_params.Rows[i]["platform_name"].ToString();
                            m_OrderBtn[j].DisNormalColor = System.Drawing.Color.FromArgb(136, 222, 255);
                            m_OrderBtn[j].NormalColor = System.Drawing.Color.FromArgb(36, 112, 160);
                            m_OrderBtn[j].HoverColor = System.Drawing.Color.FromArgb(36, 112, 160);
                            m_OrderBtn[j].PressedColor = System.Drawing.Color.FromArgb(36, 112, 160);
                            m_OrderBtn[j].ImageIndex = 0;//m_OrderBtn[j].Image = imlbutt.Images[0];
                            VTSTOREAPI.m_intVTSTOREButtonIndex = j;
                            j++;
                            */
                            break;
                        case "NIDIN_POS":
                            break;
                        case "UBER_EATS":
                            break;
                        case "FOODPANDA":
                            break;
                        case "YORES_POS":
                            break;
                    }
                }
            }

            if (blnTakeawayOrdersButton)
            {
                m_OrderBtn[j] = new CustBtn();
                m_OrderBtn[j].IsVisible = true;
                m_OrderBtn[j].InitData(-3);
                m_OrderBtn[j].m_intPrice = -4;
                m_OrderBtn[j].m_StrProductCode = "TAKEAWAYORDERS";
                m_OrderBtn[j].InitDisplay(Colors.White, new Color(36, 112, 160), new Color(36, 112, 160), "外賣訂單", dblFontSize);
                MiddleVerticalStackLayout.Add(m_OrderBtn[j]);//把所有按鈕放到Layout上
                VTSTOREAPI.m_intTakeawayOrdersButtonIndex = j;//紀錄外賣接單按鈕在主畫面中間按鈕的陣列位置
                j++;
            }
            //---顯示外接平台訂單類型
            //---
            //掃碼點單POS結帳按鈕
            if ((VTEAMQrorderAPI.m_get_qrorder_params != null) &&
                (VTEAMQrorderAPI.m_get_qrorder_params.data != null) &&
                (VTEAMQrorderAPI.m_get_qrorder_params.data.terminal_flag != null) &&
                (VTEAMQrorderAPI.m_get_qrorder_params.data.terminal_flag == "Y"))// && SQLDataTableModel.m_blnVTEAMQrorderOpen)
            {
                m_OrderBtn[j] = new CustBtn();
                m_OrderBtn[j].IsVisible = true;
                m_OrderBtn[j].InitData(-5);
                m_OrderBtn[j].m_intPrice = -6;
                m_OrderBtn[j].m_StrProductCode = "VTEAMQrorder";
                m_OrderBtn[j].InitDisplay(Colors.White, new Color(36, 112, 160), new Color(36, 112, 160), "掃碼點單結帳", dblFontSize);
                MiddleVerticalStackLayout.Add(m_OrderBtn[j]);//把所有按鈕放到Layout上
                VTEAMQrorderAPI.m_intQrorderButtonIndex = j;//掃碼點單POS結帳按鈕在主畫面中間按鈕的陣列位置
                j++;
            }
            //---掃碼點單POS結帳按鈕


            //---
            //包材按鈕顯示
            if (SqliteDataAccess.m_packaging_data.Count > 0)
            {
                m_OrderBtn[j] = new CustBtn();
                m_OrderBtn[j].IsVisible = true;
                m_OrderBtn[j].InitData(0);
                m_OrderBtn[j].m_intPrice = 0;
                m_OrderBtn[j].m_StrProductCode = "packaging_data";
                m_OrderBtn[j].InitDisplay(Colors.White, new Color(36, 112, 160), new Color(36, 112, 160), "包材選擇", dblFontSize);
                MiddleVerticalStackLayout.Add(m_OrderBtn[j]);//把所有按鈕放到Layout上
                j++;
            }
            //---包材按鈕顯示

            orderButtonInitShow();
        }

        public CustBtn m_OrderBtnSelected = null;
        public void OrderBtnClickShow(object sender = null)
        {
            if (sender != null)
            {
                m_OrderBtnSelected = (CustBtn)sender;
            }
            else
            {
                //m_OrderBtnSelected = null;
            }

            for (int i = 0; i < m_OrderBtn.Length; i++)
            {
                if(m_OrderBtn[i] != null)
                {
                    if (m_OrderBtnSelected != m_OrderBtn[i])
                    {
                        m_OrderBtn[i].SetBackgroundColor(false);
                    }
                    else
                    {
                        m_OrderBtn[i].SetBackgroundColor(true);
                    }
                }
            }

            if (m_OrderBtnSelected != null)
            {
                if (m_OrderBtnSelected.m_intSID < 0)
                {
                    return;
                }

                m_order_type_data_params = null;
                for (int i = 0; i < SqliteDataAccess.m_order_type_data.Count; i++)
                {
                    if (m_OrderBtnSelected.m_intSID == SqliteDataAccess.m_order_type_data[i].SID)
                    {
                        m_order_type_data_params = JsonClassConvert.order_type_data_params2Class(SqliteDataAccess.m_order_type_data[i].@params);//取出 訂單類型資料表 params 並 JSON2Class

                        if (m_order_type_data_params != null)
                        {
                            /*jash stop
                            buttmain064.Visible = (m_order_type_data_params.table_num_param.use_flag == "Y") ? true : false; //新增 訂單類型資料表 params 欄位 - [桌號檢查]
                            buttmain065.Visible = (m_order_type_data_params.meal_num_param.use_flag == "Y") ? true : false;//新增 訂單類型資料表 params 欄位 - [牌號檢查]
                            buttmain078.Visible = (m_order_type_data_params.guests_num_param.use_flag == "Y") ? true : false;//新增 訂單類型資料表 params 欄位 - [來客數檢查]
                            */
                        }

                        break;
                    }
                }

                m_intOrderTypeIdSelected = m_OrderBtnSelected.m_intSID;
                m_StrOrderTypeNameSelected = m_OrderBtnSelected.GetText();
                m_StrOrderTypeCodeSelected = m_OrderBtnSelected.m_StrProductCode;
                m_intOrderTypeInvoiceState = m_OrderBtnSelected.m_min_count;//開立發票選項 0:預設 1:暫停不開 2:詢問

                String SQL = String.Format("SELECT product_sid,price FROM product_price_type_relation WHERE price_type_sid='{0}'", m_OrderBtnSelected.m_intPrice);
                SQLDataTableModel.m_product_price_type_relationDataTable = SQLDataTableModel.GetDataTable(SQL);

                if ((m_StrPosOrderNumber.Length > 0) && (m_intOrderState == 0))
                {
                    SQL = String.Format("UPDATE order_data SET order_type='{0}',order_type_name='{1}',order_type_code='{2}',updated_time='{3}' WHERE order_no='{4}';"
                        , m_intOrderTypeIdSelected, m_StrOrderTypeNameSelected, m_StrOrderTypeCodeSelected, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), m_StrPosOrderNumber);
                    SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);
                }

                if (m_ShopCart != null)
                {
                    m_ShopCart.m_intOrderType = m_intOrderTypeIdSelected;

                }
                OrderTypeValueLable.Text = m_OrderBtnSelected.GetText();
            }
            else
            {
                OrderTypeValueLable.Text = "";
            }

        }
        //---訂單類型按鈕顯示函數

        //---
        //訂單類型按鈕預設顯示函數
        public void orderButtonInitShow()
        {
            m_intOrderTypeIdSelected = -1;
            m_StrOrderTypeNameSelected = "";
            m_StrOrderTypeCodeSelected = "";
            if (SqliteDataAccess.m_company.Count > 0)
            {
                for (int i = 0; i < m_OrderBtn.Length; i++)
                {
                    if ((m_OrderBtn[i]!=null) && (SqliteDataAccess.m_company[0].def_order_type == m_OrderBtn[i].m_intSID))
                    {                        
                        m_OrderBtnSelected = m_OrderBtn[i];//設定特定按鈕已被選取
                        OrderBtnClickShow();
                        break;
                    }
                }
            }
        }
        //---訂單類型按鈕預設顯示函數
        private async void OrderBtn_Click(object sender, EventArgs e)//建立訂單類型按鈕事件
        {

            if (AfterPaymentUIInit() != 0)
            {
                return;
            }

            OrderBtnClickShow(sender);

            if (m_OrderBtnSelected.m_intSID >= 0)
            {//POS訂單類型
                //---
                //整合建立訂單編號字串功能
                if (await PosOrderNumberCreatUIInitAsync() != 0)
                {
                    return;//跳出程序
                }
                //---整合建立訂單編號字串功能

                /*jash stop
                ChangeOrderTypeCalculate();

                dgvmain001_SelectionChangedCall();
                */
            }
            else
            {//顯示外接平台訂單類型
                switch (m_OrderBtnSelected.m_StrProductCode)
                {
                    case "VTSTORE"://點點按鈕
                        /* jash stop
                        TransitionsFun.ShowUI("正在載入點點食訂單資訊,請稍後...");
                        SyncThread.m_blnGetVTSTOREData = false;//停止背景抓取資料
                        VTSTORE VTSTOREBuf = new VTSTORE();
                        VTSTOREBuf.ShowDialog();
                        SyncThread.m_blnGetVTSTOREData = true;//開啟背景抓取資料
                        */
                        break;
                    case "TAKEAWAYORDERS"://外賣接單按鈕
                        /* jash stop
                        TransitionsFun.ShowUI("正在載入外賣訂單資訊,請稍後...");
                        SyncThread.m_blnGetUbereatsData = false;//停止背景抓取資料
                        SyncThread.m_blnGetFoodpandaData = false;//停止背景抓取資料
                        TakeawayOrderList TakeawayOrderListBuf = new TakeawayOrderList();
                        TakeawayOrderListBuf.ShowDialog();
                        SyncThread.m_blnGetUbereatsData = true;//開啟背景抓取資料
                        SyncThread.m_blnGetFoodpandaData = true;//開啟背景抓取資料
                        */
                        break;
                    case "VTEAMQrorder"://掃碼點單結帳
                        /* jash stop
                        TransitionsFun.ShowUI("正在載入掃碼點單結帳資訊,請稍後...");
                        VTEAMQrorderAPI.m_get_qrorder_order_data = null;
                        SyncThread.m_blnGetQrorderData = false;//停止背景抓取資料
                        VTEAMQrorderAPI.get_order_list();//讀取待結帳的掃碼訂單清單
                        Qrorder QrorderBuf = new Qrorder();
                        QrorderBuf.ShowDialog();
                        SyncThread.m_blnGetQrorderData = true;//開啟背景抓取資料
                        //---
                        //載物購物車進行結帳
                        if ((VTEAMQrorderAPI.m_get_qrorder_order_data != null) && (VTEAMQrorderAPI.m_get_qrorder_order_data.data != null))
                        {
                            buttmain054.PerformClick();//將購物車尚未結帳訂單放入暫存
                            //---
                            //整合建立訂單編號字串功能
                            if (PosOrderNumberCreatUIInit() != 0)
                            {
                                return;//跳出程序
                            }
                            //---整合建立訂單編號字串功能
                            Qrorder2ShopCart();
                            Qrorder2DB();
                            orderLoadEdit();//載入最後一筆可編輯的訂單
                        }
                        //---載物購物車進行結帳
                        */
                        break;
                    case "NIDIN_POS":
                        break;
                    case "UBER_EATS":
                        break;
                    case "FOODPANDA":
                        break;
                    case "YORES_POS":
                        break;
                }
            }
        }

        //---建立orderButton陣列

        //---
        //客顯資料相關變數
        public int m_intcmb006LastSelectedIndex = -1;
        public cust_display_data m_cust_display_dataNew = null;//新增資料
        //---客顯資料相關變數

        //---
        //報表號相關變數
        public static String m_StrPosReportNumber = "";//紀錄報表號的成員變數
        private const int m_intReportNumberTestMaxCount = 50;//建立報表號最大嘗試次數
        //---報表號相關變數

        //---
        //收支號相關變數
        public static String m_StrPosExpenseNumber = "";//紀錄報表號的成員變數
        private const int m_intExpenseNumberTestMaxCount = 50;//建立報表號最大嘗試次數
        //---收支號相關變數

        //---
        private bool m_blnBillDiscount = false;//自訂義折扣/折讓 啟動與否
        private bool m_blnBillDiscountArea = false;//優惠專區折扣/讓 啟動與否
        //---
        public void ShopCartListChangeCondimentBtnInitShow()
        {
            if (m_ShopcartItemSelected!=null)
            {
                m_CustBtnProductSelected = null;

                String StrBuf = m_ShopcartItemSelected.id;
                if ((StrBuf != null) && (StrBuf.Length > 0))
                {
                    string[] strs = StrBuf.Split(',');
                    int intMainindex = Int32.Parse(strs[0]);
                    int intSubindex = Int32.Parse(strs[1]);
                    int intMainSID = m_ShopCart.m_ShopMainList[intMainindex].m_intSID;
                    if (m_ShopCart.m_ShopMainList[intMainindex].m_Stritem_type == "K")
                    {
                        CondimentBtnInitHide();//調味品按鈕初始化
                    }
                    else
                    {
                        CondimentBtnInitShow(true, intMainSID);
                    }

                }
            }
        }
        void QuantityBtnEnableStateSet(int intItemState = -1, int intDiscountState = -1, int intSubtotalState = -1, String StrTs = "")
        {
            /*jash stop
            buttmain079.Visible = false;//修改套餐按鈕
            buttmain049.Enabled = false;//訂單備註按鈕
            buttmain050.Enabled = false;//修改數量
            buttmain051.Enabled = false;//+1
            buttmain052.Enabled = false;//-1
            buttmain053.Enabled = false;//刪除
            buttmain054.Enabled = false;//暫存訂單
            buttmain055.Enabled = true;//取回訂單
            if ((m_intOrderState == 0) && (m_StrPosOrderNumber.Length > 0)) //0:new
            {

                buttmain049.Enabled = true; //訂單備註按鈕

                //判斷項目內容-產品/調味品/折扣讓/小計
                //state0
                //0[產品]
                //1[折扣讓]
                //2[小計]
                //3[調味品合併]
                //4[調味品單一]

                //判斷有折扣/折讓
                //state1 0/1

                //判斷有無小計
                //state2 0/1

                //套餐相關標籤
                //T -套餐
                //TP -套餐產品
                //TPC -(套餐產品)配料
                //TS -小計
                //TD -套餐折扣讓

                if (StrTs.Length > 0)//套餐處理
                {
                    int intItemState01 = intItemState;

                    if (StrTs == "T")
                    {
                        intItemState01 = 0;
                    }
                    else if (StrTs == "TP")
                    {
                        intItemState01 = 3;
                    }
                    else if (StrTs == "TPC")
                    {
                        intItemState01 = 3;
                    }

                    if ((intDiscountState == 0) && (intSubtotalState == 0))//無折扣讓+無小記
                    {
                        switch (intItemState01)
                        {
                            case 0://0[產品] ~ 有選擇產品清單 - 取回暫存Disable,其他都是 Enable
                                buttmain049.Enabled = true;//訂單備註按鈕
                                buttmain050.Enabled = true;//修改數量
                                buttmain051.Enabled = true;//+1
                                buttmain052.Enabled = true;//-1
                                buttmain053.Enabled = true;//刪除
                                buttmain054.Enabled = true;//暫存訂單
                                buttmain055.Enabled = false;//取回訂單
                                buttmain079.Visible = true;//修改套餐按鈕
                                break;
                            case 1://1[折扣讓] ~ 折扣讓本身  - 除了 刪除/暫存訂單/訂單備註 Enable,其他都是Disable
                                buttmain049.Enabled = true;//訂單備註按鈕
                                buttmain050.Enabled = false;//修改數量
                                buttmain051.Enabled = false;//+1
                                buttmain052.Enabled = false;//-1
                                buttmain053.Enabled = true;//刪除
                                buttmain054.Enabled = true;//暫存訂單
                                buttmain055.Enabled = false;//取回訂單
                                break;
                            case 2://2[小計] ~ 小計本身 - 除了 刪除/暫存訂單/訂單備註 Enable,其他都是Disable
                                buttmain049.Enabled = true;//訂單備註按鈕
                                buttmain050.Enabled = false;//修改數量
                                buttmain051.Enabled = false;//+1
                                buttmain052.Enabled = false;//-1
                                buttmain053.Enabled = true;//刪除
                                buttmain054.Enabled = true;//暫存訂單
                                buttmain055.Enabled = false;//取回訂單
                                break;
                            case 3://3[調味品合併] ~ 有選擇配料複合清單 - 除了 暫存訂單/訂單備註 Enable,其他都是Disable
                                buttmain049.Enabled = true;//訂單備註按鈕
                                buttmain050.Enabled = false;//修改數量
                                buttmain051.Enabled = false;//+1
                                buttmain052.Enabled = false;//-1
                                buttmain053.Enabled = false;//刪除
                                buttmain054.Enabled = true;//暫存訂單
                                buttmain055.Enabled = false;//取回訂單
                                break;
                            case 4://4[調味品單一] ~ 有選擇配料單一清單 - 除了 刪除/暫存訂單/訂單備註 Enable,其他都是Disable
                                buttmain049.Enabled = true;//訂單備註按鈕
                                buttmain050.Enabled = false;//修改數量
                                buttmain051.Enabled = false;//+1
                                buttmain052.Enabled = false;//-1
                                buttmain053.Enabled = true;//刪除
                                buttmain054.Enabled = true;//暫存訂單
                                buttmain055.Enabled = false;//取回訂單
                                break;
                        }
                    }
                    else
                    {
                        if (intDiscountState == 1)//判斷有折扣/折讓 ~ 折扣讓(之前) 不能 數量
                        {
                            buttmain049.Enabled = true;//訂單備註按鈕
                            buttmain050.Enabled = false;//修改數量
                            buttmain051.Enabled = false;//+1
                            buttmain052.Enabled = false;//-1
                            buttmain053.Enabled = true;//刪除
                            buttmain054.Enabled = true;//暫存訂單
                            buttmain055.Enabled = true;//取回訂單
                        }

                        if (intSubtotalState == 1)//判斷有無小計 ~ 小計後(之前) 不能 刪除/數量
                        {
                            buttmain049.Enabled = true;//訂單備註按鈕
                            buttmain050.Enabled = false;//修改數量
                            buttmain051.Enabled = false;//+1
                            buttmain052.Enabled = false;//-1
                            buttmain053.Enabled = false;//刪除
                            buttmain054.Enabled = true;//暫存訂單
                            buttmain055.Enabled = true;//取回訂單
                        }
                    }
                    return;
                }

                //一般處理
                if ((intDiscountState == 0) && (intSubtotalState == 0))//無折扣讓+無小記
                {
                    switch (intItemState)
                    {
                        case 0://0[產品] ~ 有選擇產品清單 - 取回暫存Disable,其他都是 Enable
                            buttmain049.Enabled = true;//訂單備註按鈕
                            buttmain050.Enabled = true;//修改數量
                            buttmain051.Enabled = true;//+1
                            buttmain052.Enabled = true;//-1
                            buttmain053.Enabled = true;//刪除
                            buttmain054.Enabled = true;//暫存訂單
                            buttmain055.Enabled = false;//取回訂單
                            break;
                        case 1://1[折扣讓] ~ 折扣讓本身  - 除了 刪除/暫存訂單/訂單備註 Enable,其他都是Disable
                            buttmain049.Enabled = true;//訂單備註按鈕
                            buttmain050.Enabled = false;//修改數量
                            buttmain051.Enabled = false;//+1
                            buttmain052.Enabled = false;//-1
                            buttmain053.Enabled = true;//刪除
                            buttmain054.Enabled = true;//暫存訂單
                            buttmain055.Enabled = false;//取回訂單
                            break;
                        case 2://2[小計] ~ 小計本身 - 除了 刪除/暫存訂單/訂單備註 Enable,其他都是Disable
                            buttmain049.Enabled = true;//訂單備註按鈕
                            buttmain050.Enabled = false;//修改數量
                            buttmain051.Enabled = false;//+1
                            buttmain052.Enabled = false;//-1
                            buttmain053.Enabled = true;//刪除
                            buttmain054.Enabled = true;//暫存訂單
                            buttmain055.Enabled = false;//取回訂單
                            break;
                        case 3://3[調味品合併] ~ 有選擇配料複合清單 - 除了 暫存訂單/訂單備註 Enable,其他都是Disable
                            buttmain049.Enabled = true;//訂單備註按鈕
                            buttmain050.Enabled = false;//修改數量
                            buttmain051.Enabled = false;//+1
                            buttmain052.Enabled = false;//-1
                            buttmain053.Enabled = false;//刪除
                            buttmain054.Enabled = true;//暫存訂單
                            buttmain055.Enabled = false;//取回訂單
                            break;
                        case 4://4[調味品單一] ~ 有選擇配料單一清單 - 除了 刪除/暫存訂單/訂單備註 Enable,其他都是Disable
                            buttmain049.Enabled = true;//訂單備註按鈕
                            buttmain050.Enabled = false;//修改數量
                            buttmain051.Enabled = false;//+1
                            buttmain052.Enabled = false;//-1
                            buttmain053.Enabled = true;//刪除
                            buttmain054.Enabled = true;//暫存訂單
                            buttmain055.Enabled = false;//取回訂單
                            break;
                    }
                }
                else
                {
                    if (intDiscountState == 1)//判斷有折扣/折讓 ~ 折扣讓(之前) 不能 數量
                    {
                        buttmain049.Enabled = true;//訂單備註按鈕
                        buttmain050.Enabled = false;//修改數量
                        buttmain051.Enabled = false;//+1
                        buttmain052.Enabled = false;//-1
                        buttmain053.Enabled = true;//刪除
                        buttmain054.Enabled = true;//暫存訂單
                        buttmain055.Enabled = true;//取回訂單
                    }

                    if (intSubtotalState == 1)//判斷有無小計 ~ 小計後(之前) 不能 刪除/數量
                    {
                        buttmain049.Enabled = true;//訂單備註按鈕
                        buttmain050.Enabled = false;//修改數量
                        buttmain051.Enabled = false;//+1
                        buttmain052.Enabled = false;//-1
                        buttmain053.Enabled = false;//刪除
                        buttmain054.Enabled = true;//暫存訂單
                        buttmain055.Enabled = true;//取回訂單
                    }
                }

            }
            */
        }

        public void order_dataModify()//更新order_data 金額&數量&稅金
        {
            String SQL = "";
            int intODsubtotal = 0;//未刪除所有該訂單項目單筆小計(item_subtotal)的加總
            int intODdiscount_fee = 0;//未刪除所有該訂單項目折扣金額(discount_fee)的加總
            int intODtax_fee = 0;//找出order_content_data應稅商品總金額(item_subtotal)加總並計算

            //List<int> ListProductID = new List<int>();
            double dblODpromotion_fee = 0;
            String StrPromotionValue = "";

            //---
            //新增 訂單類型資料表 params 欄位 流程圖 - [服務費計算]
            int intODservice_fee = 0;
            int intODservice_rate = 0;
            //---新增 訂單類型資料表 params 欄位 流程圖 - [服務費計算]

            int intODamount = 0;//intODsubtotal - intODdiscount_fee + intODservice_fee
            int intODtrans_reversal = 0;//交易沖正 (amount為負數值;trans_reversal=Math.Abs(amount);amount設為0)
            int intODitem_count = 0;

            //---
            //計算訂單產品數量
            for (int i = 0; i < m_ShopCart.m_ShopMainList.Count; i++)
            {
                if (!((m_ShopCart.m_ShopMainList[i].m_Strdel_flag == "Y") || (m_ShopCart.m_ShopMainList[i].m_Stritem_type == "S") || (m_ShopCart.m_ShopMainList[i].m_intparent_item_no > 0)))//剃除刪除、套餐下的產品和小計
                {
                    //ListProductID.Add(m_ShopCart.m_ShopMainList[i].m_intSID);//記錄所有購物車產品編號,為了促銷運算使用
                    intODitem_count += m_ShopCart.m_ShopMainList[i].m_intAmount;
                }
            }
            //---計算訂單產品數量

            //---
            //更新 order_data
            //SQL = String.Format("SELECT item_subtotal,discount_fee,tax_fee FROM order_content_data WHERE order_no='{0}' AND del_flag='N';", m_StrPosOrderNumber);
            SQL = String.Format("SELECT item_subtotal,discount_fee,tax_rate,item_type FROM order_content_data WHERE order_no='{0}' AND del_flag='N';", m_StrPosOrderNumber);
            DataTable m_order_content_dataDataTable = SQLDataTableModel.GetDataTable(SQL);
            int inttax_rateSum = 0;
            int inttax_rateCount = 0;
            for (int i = 0; i < m_order_content_dataDataTable.Rows.Count; i++)
            {
                if (m_order_content_dataDataTable.Rows[i][3].ToString() != "S")//小計金額&稅金&稅金 不列入計算
                {
                    intODsubtotal += Int32.Parse(m_order_content_dataDataTable.Rows[i][0].ToString());
                    if (Int32.Parse(m_order_content_dataDataTable.Rows[i][2].ToString()) > 0)//找出order_content_data應稅商品總金額(item_subtotal)加總
                    {
                        intODtax_fee += Int32.Parse(m_order_content_dataDataTable.Rows[i][0].ToString());
                        inttax_rateSum += Int32.Parse(m_order_content_dataDataTable.Rows[i][2].ToString());
                        inttax_rateCount++;
                    }
                }

                intODdiscount_fee += Int32.Parse(m_order_content_dataDataTable.Rows[i][1].ToString());//小計折扣列入計算
            }

            //---
            //計算促銷
            //ListProductID = ListProductID.Distinct().ToList();
            //int[] arr = ListProductID.ToArray();
            ODPromotionValue ODPromotionValueBuf = new ODPromotionValue();
            //jash stop txtmain002.Visible = false;//隱藏元件促銷資訊
            dblODpromotion_fee = Promotion_fun.calculate(m_intOrderTypeIdSelected, m_StrPosOrderNumber, ref ODPromotionValueBuf);
            if (dblODpromotion_fee > 0)
            {
                //jash stop txtmain002ShowMsg(ODPromotionValueBuf);
                StrPromotionValue = JsonClassConvert.ODPromotionValue2String(ODPromotionValueBuf);
            }
            //---計算促銷

            //---
            //新增 訂單類型資料表 params 欄位 流程圖 - [服務費計算]
            if ((m_order_type_data_params != null) && (m_order_type_data_params.service_fee_param != null) && (m_order_type_data_params.service_fee_param.use_flag == "Y"))
            {
                intODservice_rate = Convert.ToInt32(m_order_type_data_params.service_fee_param.calc_val.ToString());
                if (m_order_type_data_params.service_fee_param.calc_type == "P")
                {
                    //service_fee=subtotal*service_rate/100
                    intODservice_fee = (int)Service_fun.calculate(intODsubtotal, intODservice_rate, 0);
                }
                else
                {
                    //service_fee=(subtotal-discount_fee)*service_rate/100
                    intODservice_fee = (int)Service_fun.calculate((intODsubtotal - intODdiscount_fee - dblODpromotion_fee), intODservice_rate, 0);
                }
            }
            //---新增 訂單類型資料表 params 欄位 流程圖 - [服務費計算]



            intODamount = intODsubtotal - intODdiscount_fee - (int)dblODpromotion_fee + intODservice_fee;
            if (intODamount < 0)
            {
                intODtrans_reversal = Math.Abs(intODamount);//交易沖正計算
                intODamount = 0;
            }
            else
            {
                intODtrans_reversal = 0;
            }
            if (inttax_rateCount > 0)//找出order_content_data應稅商品總金額(item_subtotal)加總並計算
            {
                intODtax_fee = (int)Tax_fun.calculate(intODtax_fee, (inttax_rateSum / inttax_rateCount), 0);//intODtax_fee * (inttax_rateSum / inttax_rateCount) / 100;
                intODtax_fee = (intODtax_fee > 0) ? intODtax_fee : 0;
            }

            SQL = String.Format("UPDATE order_data SET item_count='{0}', subtotal='{1}', discount_fee='{2}',tax_fee='{3}',amount='{4}',updated_time='{5}',service_fee='{6}',service_rate='{7}',promotion_fee='{8}',promotion_value='{9}',trans_reversal='{10}' WHERE order_no='{11}';",
                intODitem_count, intODsubtotal, intODdiscount_fee, intODtax_fee, intODamount, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), intODservice_fee, intODservice_rate, dblODpromotion_fee, StrPromotionValue, intODtrans_reversal, m_StrPosOrderNumber);
            SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);
            //---更新 order_data
        }

        public void ShopcartListViewMainTotalSumChange(int intMainArrayIndex)
        {
            for (int i = 0; i < m_ShopcartItems.Count; i++)
            {
                String StrBuf = m_ShopcartItems[i].id;
                string[] strs = StrBuf.Split(',');
                int intMainindex = Int32.Parse(strs[0]);
                int intSubindex = Int32.Parse(strs[1]);
                if (intMainArrayIndex > 0)//指定主項目修改
                {
                    if ((intMainindex == intMainArrayIndex) && (intSubindex == -1))
                    {
                        m_ShopcartItems[i].Amount = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount.ToString();
                        m_ShopcartItems[i].Price = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice.ToString();
                        m_ShopcartItems[i].Sum = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum.ToString();
                        //---
                        //UDP購物車商品異動資訊
                        CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = 0;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                        //---UDP購物車商品異動資訊
                        String SQL = String.Format("SELECT promotion_value,promotion_fee,discount_fee, item_count, amount, order_type_name, class_name, call_num, table_name, meal_num, paid_info, change_fee,remarks,order_state,service_fee,guests_num FROM order_data WHERE order_no = '{0}' LIMIT 0,1", m_StrPosOrderNumber);
                        DataTable order_dataDataTable = SQLDataTableModel.GetDataTable(SQL);
                        //---
                        //UDP訂單主資訊異動
                        if (order_dataDataTable.Rows.Count > 0)
                        {
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.order_no = OrderNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.status = OrderStatusLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.amount = Convert.ToInt32(order_dataDataTable.Rows[0]["amount"].ToString());
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.ordercount = Convert.ToInt32(order_dataDataTable.Rows[0]["item_count"].ToString());
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PaidCash = ChangeValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PayStateLabel = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PayState = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Cust_EIN = TaxIDTextLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Inv_Carrier_Value = CarrierValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Table_Name = TableNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Meal_Num = ShopNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Member_Name = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Member_Phone = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.ORDERFINISH = (order_dataDataTable.Rows[0]["order_state"].ToString() == "1") ? "Y" : "N";
                            CustomerDisplayUDP.ToUdp();
                        }
                        //---UDP訂單主資訊異動
                        break;
                    }
                }
                else//修改全部主項目
                {
                    if ((intMainindex >= 0) && (intSubindex == -1))
                    {
                        m_ShopcartItems[i].Amount = m_ShopCart.m_ShopMainList[intMainindex].m_intAmount.ToString();
                        m_ShopcartItems[i].Price = m_ShopCart.m_ShopMainList[intMainindex].m_dblPrice.ToString();
                        m_ShopcartItems[i].Sum = m_ShopCart.m_ShopMainList[intMainindex].m_dblSum.ToString();
                    }

                    if ((intMainindex >= 0) && (intSubindex == -3))
                    {
                        m_ShopcartItems[i].Sum = m_ShopCart.m_ShopMainList[intMainindex].m_dblSum.ToString();
                    }

                    if ((intMainindex >= 0) && ((intSubindex == -3) || (intSubindex == -1)))
                    {
                        //---
                        //UDP購物車商品異動資訊
                        CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainindex].m_StrName;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainindex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = 0;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainindex].m_Stritem_type;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainindex].m_intAmount;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainindex].m_dblPrice);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainindex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainindex].m_dblSum);
                        CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                        //---UDP購物車商品異動資訊
                        String SQL = String.Format("SELECT promotion_value,promotion_fee,discount_fee, item_count, amount, order_type_name, class_name, call_num, table_name, meal_num, paid_info, change_fee,remarks,order_state,service_fee,guests_num FROM order_data WHERE order_no = '{0}' LIMIT 0,1", m_StrPosOrderNumber);
                        DataTable order_dataDataTable = SQLDataTableModel.GetDataTable(SQL);

                        //---
                        //UDP訂單主資訊異動
                        if (order_dataDataTable.Rows.Count > 0)
                        {
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.order_no = OrderNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.status = OrderStatusLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.amount = Convert.ToInt32(order_dataDataTable.Rows[0]["amount"].ToString());
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.ordercount = Convert.ToInt32(order_dataDataTable.Rows[0]["item_count"].ToString());
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PaidCash = ChangeValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PayStateLabel = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PayState = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Cust_EIN = TaxIDTextLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Inv_Carrier_Value = CarrierValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Table_Name = TableNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Meal_Num = ShopNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Member_Name = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Member_Phone = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.ORDERFINISH = (order_dataDataTable.Rows[0]["order_state"].ToString() == "1") ? "Y" : "N";
                            CustomerDisplayUDP.ToUdp();
                        }
                        //---UDP訂單主資訊異動

                    }//if((intMainindex >= 0) && ((intSubindex == -3) || (intSubindex == -1)))
                }
            }
        }

        public void MainTotalSumCalculate(int index = -1)//新增模式[不考慮折扣/折讓情況下] 計算每筆產品的總金額 更新變數 & DB對應值 [order_content_data]
        {
            ///	01.更新DB資料 - order_content_data
            ///		01-1.使用迴圈將購物車還未標註刪除的產品資料取出(並且剔除套餐下的產品資訊)
            ///		01-2.使用迴圈將取出該產品下非刪除狀態的配料價格
            ///		01-3.整理要更新到DB的變數值
            ///	02.更新DB資料 - order_data [order_dataModify()]
            ///		02-1.使用迴圈將購物車還未標註刪除的產品資料取出統計數量
            ///		02-2.統計order_content_data對應資料	

            //當新增折扣折讓後 該筆產品就不得再被修改數量和內容 (這是規定)
            String SQL = "";

            //---
            //修改order_content_data中 產品的 item_subtotal、discount_fee、item_amount、tax_fee
            if (index > -1)
            {
                if ((m_ShopCart.m_ShopMainList[index].m_Strdel_flag != "Y") && (m_ShopCart.m_ShopMainList[index].m_intparent_item_no == 0))//判斷該筆資料非刪除狀態(並且剔除套餐下的產品資訊)
                {
                    int item_count = 0, condiment_price = 0, item_cost = 0, item_subtotal = 0, discount_fee = 0, item_amount = 0, tax_fee = 0;
                    for (int j = 0; j < m_ShopCart.m_ShopMainList[index].m_ShopSubList.Count; j++)//
                    {
                        if (m_ShopCart.m_ShopMainList[index].m_ShopSubList[j].m_Strdel_flag != "Y")
                        {
                            condiment_price += (int)m_ShopCart.m_ShopMainList[index].m_ShopSubList[j].m_dblSum;
                        }//if (m_ShopCart.m_ShopMainList[i].m_ShopSubList[j].m_Strdel_flag != "Y")
                    }
                    item_cost = (int)m_ShopCart.m_ShopMainList[index].m_dblPrice;
                    item_count = m_ShopCart.m_ShopMainList[index].m_intAmount;
                    discount_fee = m_ShopCart.m_ShopMainList[index].m_intdiscount_fee;
                    item_subtotal = (int)(m_ShopCart.m_ShopMainList[index].m_intAmount * (m_ShopCart.m_ShopMainList[index].m_dblPrice + condiment_price));
                    item_amount = item_subtotal - discount_fee;
                    tax_fee = (int)Tax_fun.calculate(item_amount, m_ShopCart.m_ShopMainList[index].m_inttax_rate, 0);//item_amount * m_ShopCart.m_ShopMainList[i].m_inttax_rate / 100;

                    m_ShopCart.m_ShopMainList[index].m_dblSum = item_subtotal;

                    SQL = String.Format("UPDATE order_content_data SET condiment_price='{0}', item_subtotal='{1}', discount_fee='{2}', item_amount='{3}',tax_fee='{4}',item_count='{5}',item_cost='{6}' WHERE order_no='{7}' AND item_no='{8}';",
                                                condiment_price, item_subtotal, discount_fee, item_amount, tax_fee, item_count, item_cost, m_StrPosOrderNumber, m_ShopCart.m_ShopMainList[index].m_intitem_no);

                    SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                }//if(m_ShopCart.m_ShopMainList[i].m_Strdel_flag!="Y")
            }
            else
            {
                for (int i = 0; i < m_ShopCart.m_ShopMainList.Count; i++)//使用迴圈將購物車內每筆產品資料取出
                {
                    if ((m_ShopCart.m_ShopMainList[i].m_Strdel_flag != "Y") && (m_ShopCart.m_ShopMainList[i].m_intparent_item_no == 0))//判斷該筆資料非刪除狀態(並且剔除套餐下的產品資訊)
                    {
                        int item_count = 0, condiment_price = 0, item_cost = 0, item_subtotal = 0, discount_fee = 0, item_amount = 0, tax_fee = 0;
                        for (int j = 0; j < m_ShopCart.m_ShopMainList[i].m_ShopSubList.Count; j++)//
                        {
                            if (m_ShopCart.m_ShopMainList[i].m_ShopSubList[j].m_Strdel_flag != "Y")
                            {
                                condiment_price += (int)m_ShopCart.m_ShopMainList[i].m_ShopSubList[j].m_dblSum;
                            }//if (m_ShopCart.m_ShopMainList[i].m_ShopSubList[j].m_Strdel_flag != "Y")
                        }
                        item_cost = (int)m_ShopCart.m_ShopMainList[i].m_dblPrice;
                        item_count = m_ShopCart.m_ShopMainList[i].m_intAmount;
                        discount_fee = m_ShopCart.m_ShopMainList[i].m_intdiscount_fee;
                        item_subtotal = (int)(m_ShopCart.m_ShopMainList[i].m_intAmount * (m_ShopCart.m_ShopMainList[i].m_dblPrice + condiment_price));
                        item_amount = item_subtotal - discount_fee;
                        tax_fee = (int)Tax_fun.calculate(item_amount, m_ShopCart.m_ShopMainList[i].m_inttax_rate, 0);//item_amount * m_ShopCart.m_ShopMainList[i].m_inttax_rate / 100;

                        m_ShopCart.m_ShopMainList[i].m_dblSum = item_subtotal;

                        SQL = String.Format("UPDATE order_content_data SET condiment_price='{0}', item_subtotal='{1}', discount_fee='{2}', item_amount='{3}',tax_fee='{4}',item_count='{5}',item_cost='{6}' WHERE order_no='{7}' AND item_no='{8}';",
                                                    condiment_price, item_subtotal, discount_fee, item_amount, tax_fee, item_count, item_cost, m_StrPosOrderNumber, m_ShopCart.m_ShopMainList[i].m_intitem_no);

                        SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                    }//if(m_ShopCart.m_ShopMainList[i].m_Strdel_flag!="Y")
                }
            }

            //---修改order_content_data中 產品的 item_subtotal、discount_fee、item_amount、tax_fee

            order_dataModify();



        }

        void ShopcartListViewShow(int intAction, int intMainArrayIndex, int intSubArrayIndex, int intFontSize, bool blnOnlyShow = false)
        {
            //dgvmain001.Columns[0].Visible = true;
            String SQL = "";
            //陣列ID-[M,S],圖1,圖2,產品名,數量,價格,總價,圖編號,字型大小
            switch (intAction)
            {
                case 0://主項(產品)新增
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdel_flag != "Y")
                    {
                        ShopcartItem ShopcartItemMain = new ShopcartItem();
                        ShopcartItemMain.id = intMainArrayIndex + "," + intSubArrayIndex;//陣列ID-[M,S]
                        ShopcartItemMain.Image00 = m_StrShopcartIcons[0];//"checkbox00.png"
                        ShopcartItemMain.Image01 = m_StrShopcartIcons[2];//"blank.png"
                        ShopcartItemMain.Name = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                        ShopcartItemMain.Amount = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount.ToString();
                        ShopcartItemMain.Price = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice.ToString();
                        ShopcartItemMain.Sum = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum.ToString();
                        ShopcartItemMain.image_id = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intImgId.ToString();
                        ShopcartItemMain.Font_Color = Colors.Black;
                        ShopcartItemMain.Font_Size = Device.GetNamedSize(NamedSize.Subtitle, typeof(Label));
                        ShopcartItemMain.State = "0";
                        ShopcartItemMain.BColor = Colors.Transparent;
                        m_ShopcartItems.Add(ShopcartItemMain);
                        ShopcartListView.ScrollTo(m_ShopcartItems[m_ShopcartItems.Count - 1], ScrollToPosition.End, false);
                        ShopcartListView.SelectedItem = m_ShopcartItems[m_ShopcartItems.Count - 1];//選擇在最後一筆

                        //---
                        //UDP購物車商品異動資訊
                        CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "N";//N:新增 U:修改 D:刪除
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = 0;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                        //---UDP購物車商品異動資訊

                    }
                    break;
                case 1://主項(產品)選取狀態修改
                    //因為元件不同所以不用在此實作
                    break;
                case 2://調味品[唯一]新增
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }

                    //---
                    //計算新增調味品位置
                    int index = m_intShopcartSelectedIndex;
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdiscount_type == "Y")
                    {
                        index += 2;//因為 折扣/折讓 顯示在加1的位置
                    }
                    else
                    {
                        index += 1;//
                    }
                    //---計算新增調味品位置    
                    ShopcartItem ShopcartItemSub = new ShopcartItem();
                    ShopcartItemSub.id = intMainArrayIndex + "," + intSubArrayIndex;//陣列ID-[M,S]
                    ShopcartItemSub.Image00 = m_StrShopcartIcons[2];//"blank.png"
                    ShopcartItemSub.Image01 = m_StrShopcartIcons[2];//"blank.png"
                    ShopcartItemSub.Name = m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_StrName;
                    ShopcartItemSub.Amount = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_intAmount.ToString();
                    ShopcartItemSub.Price = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_dblPrice.ToString();
                    ShopcartItemSub.Sum = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_dblSum.ToString();
                    ShopcartItemSub.image_id = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_intImgId.ToString();
                    ShopcartItemSub.Font_Color = Colors.Black;
                    ShopcartItemSub.Font_Size = Device.GetNamedSize(NamedSize.Micro, typeof(Label));
                    ShopcartItemSub.State = "0";
                    ShopcartItemSub.BColor = Colors.Transparent;
                    m_ShopcartItems.Insert(index, ShopcartItemSub);
                    ShopcartListView.ScrollTo(m_ShopcartItems[m_ShopcartItems.Count - 1], ScrollToPosition.End, false);
                    //---
                    //UDP購物車商品異動資訊
                    CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "N";//N:新增 U:修改 D:刪除
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_StrName;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_Stritem_type;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_intAmount;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_dblPrice);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                    //---UDP購物車商品異動資訊

                    break;
                case 3://調味品[多筆顯示成一筆]新增
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }

                    //---
                    //產生調味品多筆合併一筆的顯示資訊
                    String StrAllSubName = m_StrTab;
                    int intAllAmount = 0;
                    double dblAllSum = 0;
                    int intStringCount = m_StrTab.Length / 2;
                    int intItemNo = -1;
                    for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList.Count; i++)
                    {
                        if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_flag != "Y")
                        {
                            intItemNo = (intItemNo < 0) ? m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intitem_no : intItemNo;
                            intAllAmount += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intAmount;
                            if ((intStringCount + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length) < 17)
                            {
                                StrAllSubName += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + ",";
                                intStringCount += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                            else
                            {
                                StrAllSubName += "\n" + m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + ",";
                                intStringCount = m_StrTab.Length / 2;
                                intStringCount += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                            dblAllSum += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum;
                        }
                    }
                    //---產生調味品多筆合併一筆的顯示資訊

                    //---
                    //更新對應顯示欄位
                    int index1 = m_intShopcartSelectedIndex;
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdiscount_type == "Y")
                    {
                        index1 += 2;//因為 折扣/折讓 顯示在加1的位置
                    }
                    else
                    {
                        index1 += 1;//
                    }
                    ShopcartItem ShopcartItemSub01 = new ShopcartItem();
                    ShopcartItemSub01.id = intMainArrayIndex + "," + intSubArrayIndex;//陣列ID-[M,S]
                    ShopcartItemSub01.Image00 = m_StrShopcartIcons[2];//"blank.png"
                    ShopcartItemSub01.Image01 = m_StrShopcartIcons[2];//"blank.png"
                    ShopcartItemSub01.Name = StrAllSubName.Substring(0, StrAllSubName.Length - 1);
                    ShopcartItemSub01.Amount = intAllAmount.ToString(); ;
                    ShopcartItemSub01.Price = "";
                    ShopcartItemSub01.Sum = dblAllSum.ToString();
                    ShopcartItemSub01.image_id = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[intSubArrayIndex].m_intImgId.ToString();
                    ShopcartItemSub01.Font_Color = Colors.Black;
                    ShopcartItemSub01.Font_Size = Device.GetNamedSize(NamedSize.Micro, typeof(Label));
                    ShopcartItemSub01.State = "0";
                    ShopcartItemSub01.BColor = Colors.Transparent;
                    m_ShopcartItems.Insert(index1, ShopcartItemSub01);
                    m_ShopcartItems.RemoveAt((index1+1));
                    ShopcartListView.ScrollTo(m_ShopcartItems[m_ShopcartItems.Count - 1], ScrollToPosition.End, false);
                    //---更新對應顯示欄位

                    //---
                    //UDP購物車商品異動資訊
                    CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = StrAllSubName.Substring(0, StrAllSubName.Length - 1);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = intItemNo;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = "C";
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = intAllAmount;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = 0;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(dblAllSum);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(dblAllSum);
                    CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                    //---UDP購物車商品異動資訊
                    break;
                case 4://調味品[多筆顯示多筆]新增
                    //5+6
                    break;
                case 5://清除特定產品下既有的調味品相關選項
                    /*jash stop
                    int intIndexX5 = dgvmain001.SelectedRows[0].Index;//取得被選取的第一列旗標位置
                    for (int i = dgvmain001.SelectedRows[0].Index; i < dgvmain001.Rows.Count; i++)
                    {
                        String StrBuf = dgvmain001.Rows[i].Cells[0].Value.ToString();
                        String StrBufName = dgvmain001.Rows[i].Cells[3].Value.ToString();
                        string[] strs = StrBuf.Split(',');
                        int intMainindex = Int32.Parse(strs[0]);
                        int intSubindex = Int32.Parse(strs[1]);
                        if ((intMainArrayIndex == intMainindex) && (intSubindex >= 0))
                        {
                            dgvmain001.Rows.Remove(dgvmain001.Rows[i]);
                            i--;
                        }
                    }
                    */
                    break;

                case 6://產生調味品多筆合併一筆 轉 多筆顯示資訊 [展開]
                    /*jash stop
                    //---
                    //修改主項(產品)總金額
                    MainTotalSumCalculate(intMainArrayIndex);
                    ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                    //---修改主項(產品)總金額

                    int intInsertX6 = dgvmain001.SelectedRows[0].Index;//取得被選取的第一列旗標位置
                    int intShiftX6 = 0;
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdiscount_type == "Y")
                    {
                        intShiftX6 += 2;//因為 折扣/折讓 顯示在加1的位置
                    }
                    else
                    {
                        intShiftX6 += 1;//
                    }
                    for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList.Count; i++)
                    {
                        if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_flag != "Y")//if(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_time!="Y")
                        {
                            intSubArrayIndex = i;
                            if (((m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdiscount_type == "N") && (intShiftX6 == 1)) || ((m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdiscount_type == "Y") && (intShiftX6 == 2)))//if (i == 0)//
                            {
                                //                                                           陣列ID-[M,S],                  圖1,                              圖2,                                                                        產品名,                                                                        數量,                                                                       價格,                                                                    總價,                                                                    圖編號,                                                                 字型大小,   顏色,狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                                dgvmain001.Rows.Insert((intInsertX6 + intShiftX6), intMainArrayIndex + "," + intSubArrayIndex, null, imlmain001.Images[m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intImgId], m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intAmount, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblPrice, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intImgId, intFontSize, "Black", 0);
                            }
                            else
                            {
                                //                                                              陣列ID-[M,S],                  圖1, 圖2,                         產品名,                                                                        數量,                                                                       價格,                                                                    總價,                                                                    圖編號,                                                    字型大小,  顏色,狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                                dgvmain001.Rows.Insert((intInsertX6 + intShiftX6), intMainArrayIndex + "," + intSubArrayIndex, null, null, m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intAmount, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblPrice, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intImgId, intFontSize, "Black", 0);
                            }
                            //jash stop dgvmainSetRow(intInsertX6 + intShiftX6);
                            intShiftX6++;
                        }
                    }

                    //---
                    //產生調味品多筆合併一筆的顯示資訊
                    String StrAllSubName06 = m_StrTab;
                    int intAllAmount06 = 0;
                    double dblAllSum06 = 0;
                    int intStringCount06 = m_StrTab.Length / 2;
                    int intItemNo06 = -1;
                    for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList.Count; i++)
                    {
                        if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_flag != "Y")
                        {
                            intItemNo06 = (intItemNo06 < 0) ? m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intitem_no : intItemNo06;
                            intAllAmount06 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intAmount;
                            if ((intStringCount06 + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length) < 17)
                            {
                                StrAllSubName06 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + ",";
                                intStringCount06 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                            else
                            {
                                StrAllSubName06 += "\n" + m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + ",";
                                intStringCount06 = m_StrTab.Length / 2;
                                intStringCount06 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                            dblAllSum06 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum;
                        }
                    }
                    //---產生調味品多筆合併一筆的顯示資訊
                    //---
                    //UDP購物車商品異動資訊
                    CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = StrAllSubName06.Substring(0, StrAllSubName06.Length - 1);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = intItemNo06;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = "C";
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = intAllAmount06;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = 0;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(dblAllSum06);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(dblAllSum06);
                    CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                    //---UDP購物車商品異動資訊
                    */
                    break;

                case 7://產生調味品多筆 轉 多筆合併一筆顯示資訊
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }

                    int intInsertX7 = dgvmain001.SelectedRows[0].Index;//取得被選取的第一列旗標位置
                    int intShiftX7 = 0;
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdiscount_type == "Y")
                    {
                        intShiftX7 += 2;//因為 折扣/折讓 顯示在加1的位置
                    }
                    else
                    {
                        intShiftX7 += 1;//
                    }

                    //---
                    //產生調味品多筆合併一筆的顯示資訊
                    String StrAllSubNameX7 = m_StrTab;
                    int intAllAmountX7 = 0;
                    double dblAllSumX7 = 0;
                    int intStringCountX7 = m_StrTab.Length / 2;
                    for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList.Count; i++)
                    {
                        if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_flag != "Y")//if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_time != "Y")
                        {
                            intAllAmountX7 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intAmount;
                            dblAllSumX7 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum;
                            String StrPrice = (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum > 0) ? $"(${m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum})" : "";
                            if ((intStringCountX7 + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length) < 17)
                            {
                                StrAllSubNameX7 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + StrPrice + ",";
                                intStringCountX7 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                            else
                            {
                                StrAllSubNameX7 += "\n" + m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + StrPrice + ",";
                                intStringCountX7 = m_StrTab.Length / 2;
                                intStringCountX7 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                        }
                    }
                    //---產生調味品多筆合併一筆的顯示資訊

                    //                                                  陣列ID-[M,S],                             圖1,                圖2,                                                                                              產品名,                                   數量,        價格,    總價,                              圖編號,                                                      字型大小,    顏色, 狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                    dgvmain001.Rows.Insert((intInsertX7 + intShiftX7), intMainArrayIndex + "," + intSubArrayIndex, null, imlmain001.Images[m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[0].m_intImgId], StrAllSubNameX7.Substring(0, StrAllSubNameX7.Length - 1), intAllAmountX7, "", dblAllSumX7, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[0].m_intImgId, intFontSize, "Black", 0);
                    //jash stop dgvmainSetRow(intInsertX7 + intShiftX7);
                    */
                    break;

                case 8://新增 折扣/折讓的資料列 顯示 intMainArrayIndex + ","+ -2
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }

                    int intInsertX8 = 0;//取得被選取的第一列旗標位置
                    int intShiftX8 = 1;
                    int intitem_no = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdiscount_type = "Y";
                    SQL = String.Format("SELECT discount_name,discount_fee,discount_type,discount_rate FROM order_content_data WHERE order_no='{0}' AND item_no='{1}';", m_StrPosOrderNumber, intitem_no);
                    DataTable order_content_dataDataTable = SQLDataTableModel.GetDataTable(SQL);
                    if (((order_content_dataDataTable != null) && (order_content_dataDataTable.Rows.Count > 0)))
                    {
                        for (int i = 0; i < dgvmain001.Rows.Count; i++)
                        {
                            String StrBuf01 = intMainArrayIndex + ",-1";//產品折扣/折讓判斷式
                            String StrBuf02 = intMainArrayIndex + ",-3";//小計折扣/折讓判斷式
                            if ((dgvmain001.Rows[i].Cells[0].Value.ToString() == StrBuf01) || (dgvmain001.Rows[i].Cells[0].Value.ToString() == StrBuf02))
                            {
                                intInsertX8 = i;
                                break;
                            }
                        }
                        //                                                  陣列ID-[M,S],                             圖1,    圖2,             產品名,                              數量,價格,                    總價,                                         圖編號,字型大小,  顏色, 狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                        dgvmain001.Rows.Insert((intInsertX8 + intShiftX8), intMainArrayIndex + "," + intSubArrayIndex, null, null, order_content_dataDataTable.Rows[0][0].ToString(), "", "", Int32.Parse(order_content_dataDataTable.Rows[0][1].ToString()) * -1, -1, intFontSize, "Red", 1);
                        //jash stop dgvmainSetRow(intInsertX8 + intShiftX8);

                        //---
                        //UDP購物車商品異動資訊
                        CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = 0;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.DiscountType = order_content_dataDataTable.Rows[0]["discount_type"].ToString();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.DiscountRate = Convert.ToInt32(order_content_dataDataTable.Rows[0]["discount_rate"].ToString());
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.DiscountFee = Convert.ToInt32(order_content_dataDataTable.Rows[0]["discount_fee"].ToString());
                        CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                        //---UDP購物車商品異動資訊
                    }
                    */
                    break;

                case 9://新增 小計資料列
                    /*jash stop
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdel_flag != "Y")
                    {
                        //                                 陣列ID-[M,S],                 圖1,  圖2,              產品名,                                  數量,價格,                        總價,                                                       圖編號,                      字型大小     顏色  狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                        dgvmain001.Rows.Add(intMainArrayIndex + "," + intSubArrayIndex, null, null, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName, "", "", m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intImgId, intFontSize, "Blue", 2);
                        dgvmain001.Rows[(dgvmain001.Rows.Count - 1)].Selected = true;//設定選擇游標都在最後一筆 / 指定哪一列被選取
                        //jash stop dgvmainSetRow(dgvmain001.Rows.Count - 1);

                        //---
                        //UDP購物車商品異動資訊
                        CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "N";//N:新增 U:修改 D:刪除
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = 0;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                        //---UDP購物車商品異動資訊
                    }
                    */
                    break;

                case 10://主項(產品)+折扣讓+調味品 UI刪除
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }
                    for (int i = 0; i < dgvmain001.Rows.Count; i++)
                    {
                        String StrBuf = dgvmain001.Rows[i].Cells[0].Value.ToString();
                        String StrBufName = dgvmain001.Rows[i].Cells[3].Value.ToString();
                        string[] strs = StrBuf.Split(',');
                        int intMainindex = Int32.Parse(strs[0]);
                        int intSubindex = Int32.Parse(strs[1]);
                        if (intMainArrayIndex == intMainindex)
                        {
                            dgvmain001.Rows.Remove(dgvmain001.Rows[i]);
                            i = -1;//從頭開始檢查
                        }
                        if ((intSubindex == 0) && (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList.Count > 0))
                        {
                            //---
                            //UDP購物車配料刪除
                            CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "D";//N:新增 U:修改 D:刪除
                            //CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[0].m_intitem_no;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[0].m_Stritem_type;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                            CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                            //---UDP購物車配料刪除

                            SQL = String.Format("SELECT promotion_value,promotion_fee,discount_fee, item_count, amount, order_type_name, class_name, call_num, table_name, meal_num, paid_info, change_fee,remarks,order_state,service_fee,guests_num FROM order_data WHERE order_no = '{0}' LIMIT 0,1", m_StrPosOrderNumber);
                            DataTable order_dataDataTable01 = SQLDataTableModel.GetDataTable(SQL);

                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.order_no = OrderNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.status = OrderStatusLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.amount = Convert.ToInt32(order_dataDataTable01.Rows[0]["amount"].ToString());
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.ordercount = Convert.ToInt32(order_dataDataTable01.Rows[0]["item_count"].ToString());
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PaidCash = ChangeValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PayStateLabel = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PayState = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Cust_EIN = TaxIDTextLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Inv_Carrier_Value = CarrierValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Table_Name = TableNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Meal_Num = ShopNoValueLable.Text;
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Member_Name = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Member_Phone = "";
                            CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.ORDERFINISH = (order_dataDataTable01.Rows[0]["order_state"].ToString() == "1") ? "Y" : "N";
                            CustomerDisplayUDP.ToUdp();

                        }
                    }
                    //---
                    //UDP購物車商品異動資訊
                    CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "D";//N:新增 U:修改 D:刪除
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = 0;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                    //---UDP購物車商品異動資訊
                    */
                    break;

                case 11://折扣讓 UI刪除
                    /*jash stop
                    for (int i = 0; i < dgvmain001.Rows.Count; i++)
                    {
                        String StrBuf = dgvmain001.Rows[i].Cells[0].Value.ToString();
                        String StrBufName = dgvmain001.Rows[i].Cells[3].Value.ToString();
                        string[] strs = StrBuf.Split(',');
                        int intMainindex = Int32.Parse(strs[0]);
                        int intSubindex = Int32.Parse(strs[1]);
                        if ((intMainArrayIndex == intMainindex) && (intSubindex == -2))
                        {
                            dgvmain001.Rows.Remove(dgvmain001.Rows[i]);
                            i = -1;//從頭開始檢查

                            //---
                            //UDP購物車商品異動資訊
                            CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = 0;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.DiscountType = "N";
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.DiscountRate = 0;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.DiscountFee = 0;
                            CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                            //---UDP購物車商品異動資訊
                        }
                    }
                    */
                    break;

                case 12://小計 UI刪除
                    /*jash stop
                    for (int i = 0; i < dgvmain001.Rows.Count; i++)
                    {
                        String StrBuf = dgvmain001.Rows[i].Cells[0].Value.ToString();
                        String StrBufName = dgvmain001.Rows[i].Cells[3].Value.ToString();
                        string[] strs = StrBuf.Split(',');
                        int intMainindex = Int32.Parse(strs[0]);
                        int intSubindex = Int32.Parse(strs[1]);
                        if (intMainArrayIndex == intMainindex)
                        {
                            dgvmain001.Rows.Remove(dgvmain001.Rows[i]);
                            i = -1;//從頭開始檢查

                            //---
                            //UDP購物車商品異動資訊
                            CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "D";//N:新增 U:修改 D:刪除
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = 0;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                            CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                            //---UDP購物車商品異動資訊
                        }
                    }
                    */
                    break;

                case 13://單一調味品 UI刪除
                    /*jash stop
                    for (int i = 0; i < dgvmain001.Rows.Count; i++)
                    {
                        String StrBuf = dgvmain001.Rows[i].Cells[0].Value.ToString();
                        String StrBufName = dgvmain001.Rows[i].Cells[3].Value.ToString();
                        string[] strs = StrBuf.Split(',');
                        int intMainindex = Int32.Parse(strs[0]);
                        int intSubindex = Int32.Parse(strs[1]);
                        if ((intMainArrayIndex == intMainindex) && (intSubindex == intSubArrayIndex))
                        {
                            dgvmain001.Rows.Remove(dgvmain001.Rows[i]);

                            //---
                            //產生調味品多筆合併一筆的顯示資訊
                            String StrAllSubName01 = m_StrTab;
                            int intAllAmount01 = 0;
                            double dblAllSum01 = 0;
                            int intStringCount01 = m_StrTab.Length / 2;
                            int intItemNo01 = -1;
                            for (int j = 0; j < m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList.Count; j++)
                            {
                                if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_Strdel_flag != "Y")
                                {
                                    intItemNo01 = (intItemNo01 < 0) ? m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_intitem_no : intItemNo01;
                                    intAllAmount01 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_intAmount;
                                    if ((intStringCount01 + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_StrName.Length) < 17)
                                    {
                                        StrAllSubName01 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_StrName + ",";
                                        intStringCount01 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_StrName.Length;
                                    }
                                    else
                                    {
                                        StrAllSubName01 += "\n" + m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_StrName + ",";
                                        intStringCount01 = m_StrTab.Length / 2;
                                        intStringCount01 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_StrName.Length;
                                    }
                                    dblAllSum01 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[j].m_dblSum;
                                }
                            }
                            //---產生調味品多筆合併一筆的顯示資訊

                            //---
                            //UDP購物車商品異動資訊
                            CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = StrAllSubName01.Substring(0, StrAllSubName01.Length - 1);
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = intItemNo01;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = "C";
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = intAllAmount01;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = 0;
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(dblAllSum01);
                            CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(dblAllSum01);
                            CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                            //---UDP購物車商品異動資訊					
                            break;
                        }
                    }
                    */
                    break;

                case 14://新增結帳完成資訊
                    /*jash stop
                    dgvmain001.Rows.Add(intMainArrayIndex + "," + intSubArrayIndex, null, null, "訂單已結帳", "", "", "", -1, intFontSize, "Black", 0);
                    //jash stop dgvmainSetRow(dgvmain001.Rows.Count - 1);
                    CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                    CustomerDisplayUDP.m_intApiState = 1;//更新客顯示訊0;結帳完成時1;清除客顯2
                    */
                    break;

                case 15://主項(套餐)新增
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdel_flag != "Y")
                    {
                        //                                 陣列ID-[M,S],'T'                                      圖1,                                                     圖2,              產品名,                                                     數量,                                                  價格,                                                         總價,                                                       圖編號,                             字型大小    顏色  狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                        dgvmain001.Rows.Add(intMainArrayIndex + "," + intSubArrayIndex + ",T", imlmain001.Images[m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intImgId], null, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intImgId, intFontSize, "Black", 0);
                        dgvmain001.Rows[(dgvmain001.Rows.Count - 1)].Selected = true;//設定選擇游標都在最後一筆 / 指定哪一列被選取
                        //jash stop dgvmainSetRow(dgvmain001.Rows.Count - 1);

                        //---
                        //UDP購物車商品異動資訊
                        CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "N";//N:新增 U:修改 D:刪除
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                        //---UDP購物車商品異動資訊		
                    }
                    */
                    break;

                case 16://主項(套餐-產品)新增
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdel_flag != "Y")
                    {
                        //                                 陣列ID-[M,S],'TP'                     圖1,   圖2,              產品名,                                                           數量,                                                  價格,                                                         總價,                                                       圖編號,                             字型大小   顏色  狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                        dgvmain001.Rows.Add(intMainArrayIndex + "," + intSubArrayIndex + ",TP", null, null, m_StrHalfTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intImgId, intFontSize, "Blue", 0);
                        dgvmain001.Rows[(dgvmain001.Rows.Count - 1)].Selected = true;//設定選擇游標都在最後一筆 / 指定哪一列被選取
                        //jash stop dgvmainSetRow(dgvmain001.Rows.Count - 1);

                        //---
                        //UDP購物車商品異動資訊
                        CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "N";//N:新增 U:修改 D:刪除
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intparent_item_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                        //---UDP購物車商品異動資訊	
                    }
                    */
                    break;

                case 17://(套餐-產品)的調味品[多筆顯示成一筆]新增
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }

                    int intInsertX17 = dgvmain001.SelectedRows[0].Index;//取得被選取的第一列旗標位置
                    int intShiftX17 = 0;
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdiscount_type == "Y")
                    {
                        intShiftX17 += 2;//因為 折扣/折讓 顯示在加1的位置
                    }
                    else
                    {
                        intShiftX17 += 1;//
                    }

                    //---
                    //產生調味品多筆合併一筆的顯示資訊
                    String StrAllSubNameX17 = m_StrTab;
                    int intAllAmountX17 = 0;
                    double dblAllSumX17 = 0;
                    int intStringCountX17 = m_StrTab.Length / 2;
                    for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList.Count; i++)
                    {
                        if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_flag != "Y")//if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_time != "Y")
                        {
                            intAllAmountX17 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intAmount;
                            dblAllSumX17 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum;
                            String StrPrice = (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum > 0) ? $"(${m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum})" : "";
                            if ((intStringCountX17 + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length) < 17)
                            {
                                StrAllSubNameX17 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + StrPrice + ",";
                                intStringCountX17 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                            else
                            {
                                StrAllSubNameX17 += "\n" + m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + StrPrice + ",";
                                intStringCountX17 = m_StrTab.Length / 2;
                                intStringCountX17 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                        }
                    }
                    //---產生調味品多筆合併一筆的顯示資訊

                    //                                                     陣列ID-[M,S],                                      圖1,  圖2,                    產品名,                                          數量,   價格,     總價,                                                     圖編號,                    字型大小,   顏色, 狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                    dgvmain001.Rows.Insert((intInsertX17 + intShiftX17), intMainArrayIndex + "," + intSubArrayIndex + ",TPC", null, null, StrAllSubNameX17.Substring(0, StrAllSubNameX17.Length - 1), intAllAmountX17, "", dblAllSumX17, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[0].m_intImgId, intFontSize, "Black", 0);
                    //jash stop dgvmainSetRow(intInsertX17 + intShiftX17);

                    //---
                    //UDP購物車商品異動資訊
                    CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intparent_item_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.CONDIMENTINFO = StrAllSubNameX17.Substring(0, StrAllSubNameX17.Length - 1);
                    CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                    //---UDP購物車商品異動資訊
                    */
                    break;

                case 18://主項(套餐)修改
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }
                    dgvmain001.Rows[intSubArrayIndex].Cells[3].Value = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                    dgvmain001.Rows[intSubArrayIndex].Cells[4].Value = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                    dgvmain001.Rows[intSubArrayIndex].Cells[5].Value = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice;
                    dgvmain001.Rows[intSubArrayIndex].Cells[6].Value = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum;

                    //---
                    //UDP購物車商品異動資訊
                    CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                    //---UDP購物車商品異動資訊
                    */
                    break;

                case 19://主項(套餐-產品)插入
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }
                    if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Strdel_flag != "Y")
                    {
                        //                                 陣列ID-[M,S],'TP'                     圖1,   圖2,              產品名,                                                           數量,                                                  價格,                                                         總價,                                                       圖編號,                             字型大小   顏色  狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                        dgvmain001.Rows.Insert((intSubArrayIndex + 0), intMainArrayIndex + "," + -1 + ",TP", null, null, m_StrHalfTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intImgId, intFontSize, "Blue", 0);
                        //jash stop dgvmainSetRow(intSubArrayIndex + 0);

                        //---
                        //UDP購物車商品異動資訊
                        CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "N";//N:新增 U:修改 D:刪除
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intparent_item_no;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                        CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                        //---UDP購物車商品異動資訊	
                    }
                    */
                    break;

                case 20://(套餐-產品)的調味品[多筆顯示成一筆]新增
                    /*jash stop
                    if (!blnOnlyShow)
                    {
                        //---
                        //修改主項(產品)總金額
                        MainTotalSumCalculate(intMainArrayIndex);
                        ShopcartListViewMainTotalSumChange(intMainArrayIndex);
                        //---修改主項(產品)總金額
                    }

                    int intInsertX20 = intSubArrayIndex;

                    //---
                    //產生調味品多筆合併一筆的顯示資訊
                    String StrAllSubNameX20 = m_StrTab;
                    int intAllAmountX20 = 0;
                    double dblAllSumX20 = 0;
                    int intStringCountX20 = m_StrTab.Length / 2;
                    for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList.Count; i++)
                    {
                        if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_flag != "Y")//if (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_Strdel_time != "Y")
                        {
                            intAllAmountX20 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_intAmount;
                            dblAllSumX20 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum;
                            String StrPrice = (m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum > 0) ? $"(${m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_dblSum})" : "";
                            if ((intStringCountX20 + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length) < 17)
                            {
                                StrAllSubNameX20 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + StrPrice + ",";
                                intStringCountX20 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                            else
                            {
                                StrAllSubNameX20 += "\n" + m_StrTab + m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName + StrPrice + ",";
                                intStringCountX20 = m_StrTab.Length / 2;
                                intStringCountX20 += m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[i].m_StrName.Length;
                            }
                        }
                    }
                    //---產生調味品多筆合併一筆的顯示資訊

                    //                                                     陣列ID-[M,S],                                      圖1,  圖2,                    產品名,                                          數量,   價格,     總價,                                                     圖編號,                    字型大小,   顏色, 狀態 - 無,小計,折讓/折扣 [State] 0,1,2
                    dgvmain001.Rows.Insert((intInsertX20 + 0), intMainArrayIndex + "," + 0 + ",TPC", null, null, StrAllSubNameX20.Substring(0, StrAllSubNameX20.Length - 1), intAllAmountX20, "", dblAllSumX20, m_ShopCart.m_ShopMainList[intMainArrayIndex].m_ShopSubList[0].m_intImgId, intFontSize, "Black", 0);
                    //jash stop dgvmainSetRow(intInsertX20 + 0);
                    //---
                    //UDP購物車商品異動資訊
                    CustomerDisplayUDP.m_CustomerDisplay = new CustomerDisplay();
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ITEMSTATE = "U";//N:新增 U:修改 D:刪除
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ProductName = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_StrName;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intitem_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ParentItemNo = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intparent_item_no;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.ItemType = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_Stritem_type;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Count = m_ShopCart.m_ShopMainList[intMainArrayIndex].m_intAmount;
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Cost = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblPrice);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.SubTotal = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.Amount = (int)(m_ShopCart.m_ShopMainList[intMainArrayIndex].m_dblSum);
                    CustomerDisplayUDP.m_CustomerDisplay.ItemInfo.CONDIMENTINFO = StrAllSubNameX20.Substring(0, StrAllSubNameX20.Length - 1);
                    CustomerDisplayUDP.m_intApiState = 0;//更新客顯示訊0;結帳完成時1;清除客顯2
                    //---UDP購物車商品異動資訊
                    */
                    break;

            }

            //---
            //訂單 數量&總價 資訊顯示
            SQL = String.Format("SELECT promotion_value,promotion_fee,discount_fee, item_count, amount, order_type_name, class_name, call_num, table_name, meal_num, paid_info, change_fee,remarks,order_state,service_fee,guests_num FROM order_data WHERE order_no = '{0}' LIMIT 0,1", m_StrPosOrderNumber);
            DataTable order_dataDataTable = SQLDataTableModel.GetDataTable(SQL);
            if (order_dataDataTable.Rows.Count > 0)
            {
                DiscountValueLable.Text = String.Format("{1}", "促銷/折扣", Convert.ToDouble(order_dataDataTable.Rows[0]["discount_fee"].ToString()) + Convert.ToDouble(order_dataDataTable.Rows[0]["promotion_fee"].ToString()));
                QuantityValueLable.Text = String.Format("{1}", "訂單數量", order_dataDataTable.Rows[0]["item_count"].ToString());
                ReceivableValueLable.Text = String.Format("{1}", "應收金額", order_dataDataTable.Rows[0]["amount"].ToString());
                ServiceValueLable.Text = String.Format("{1}", "服務費", order_dataDataTable.Rows[0]["service_fee"].ToString());
                if (order_dataDataTable.Rows[0]["remarks"].ToString().Length > 0)
                {
                    /* jash stop
                    txtmain001.Visible = true;
                    txtmain001.Text = order_dataDataTable.Rows[0]["remarks"].ToString();
                    */
            }
            if (order_dataDataTable.Rows[0]["promotion_value"].ToString().Length > 0)
                {
                    ODPromotionValue ODPromotionValueBuf = JsonClassConvert.ODPromotionValue2Class(order_dataDataTable.Rows[0]["promotion_value"].ToString());
                    //jash stop txtmain002ShowMsg(ODPromotionValueBuf);
                }

                //jash stop dgvmain001SizeChange();

                if (blnOnlyShow)
                {
                    OrderNoValueLable.Text = m_StrPosOrderNumber;
                    OrderTypeValueLable.Text = order_dataDataTable.Rows[0]["order_type_name"].ToString();
                    VisitorsValueLable.Text = order_dataDataTable.Rows[0]["guests_num"].ToString();
                    PickupNoValueLable.Text = order_dataDataTable.Rows[0]["call_num"].ToString();
                    TableNoValueLable.Text = order_dataDataTable.Rows[0]["table_name"].ToString();
                    ShopNoValueLable.Text = order_dataDataTable.Rows[0]["meal_num"].ToString();
                    if (order_dataDataTable.Rows[0]["order_state"].ToString() == "1")
                    {
                        ChangeValueLable.Text = String.Format("實收金額 : {0}({1}),找零 : {2}", order_dataDataTable.Rows[0]["amount"].ToString(), order_dataDataTable.Rows[0]["paid_info"].ToString(), order_dataDataTable.Rows[0]["change_fee"].ToString());
                    }
                }


                //UDP訂單主資訊異動
                if (CustomerDisplayUDP.m_CustomerDisplay != null)
                {
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.order_no = OrderNoValueLable.Text;
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.status = OrderStatusLable.Text;
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.amount = Convert.ToInt32(order_dataDataTable.Rows[0]["amount"].ToString());
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.ordercount = Convert.ToInt32(order_dataDataTable.Rows[0]["item_count"].ToString());
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PaidCash = ChangeValueLable.Text;
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PayStateLabel = "";
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.PayState = "";
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Cust_EIN = TaxIDTextLable.Text;
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Inv_Carrier_Value = CarrierValueLable.Text;
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Table_Name = TableNoValueLable.Text;
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Meal_Num = ShopNoValueLable.Text;
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Member_Name = "";
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.Member_Phone = "";
                    CustomerDisplayUDP.m_CustomerDisplay.OrderInfo.ORDERFINISH = (order_dataDataTable.Rows[0]["order_state"].ToString() == "1") ? "Y" : "N";
                    CustomerDisplayUDP.ToUdp();
                }
                //---UDP訂單主資訊異動
            }

            /*jash stop
            roundPanel1.Refresh();//訂購金額面板立即重繪
            txtmain001.Refresh();//顯示在購物車上的促銷優惠折扣資訊立即重繪
            */
            //---訂單 數量&總價 資訊顯示

            try
            {
                if (intMainArrayIndex > 0)
                {
                    ShopcartListView.ScrollTo(m_ShopcartItems[m_ShopcartItems.Count - 1], ScrollToPosition.End, false);//C# datagridview scrollbar 移動 最後
                }
            }
            catch
            {

            }

        }


        public void ShopCartMainListAdd()
        {
            if (m_ShopCart == null)
            {
                m_ShopCart = new ShopCart(m_intOrderTypeIdSelected);
                m_ShopCart.m_StrOrderTypeName = m_StrOrderTypeNameSelected;
                m_ShopCart.m_StrOrderTypeCode = m_StrOrderTypeCodeSelected;
                m_ShopCart.m_StrOrderNumber = m_StrPosOrderNumber;

            }
            else
            {
                m_ShopCart.m_intOrderType = m_intOrderTypeIdSelected;
                m_ShopCart.m_StrOrderTypeName = m_StrOrderTypeNameSelected;
                m_ShopCart.m_StrOrderTypeCode = m_StrOrderTypeCodeSelected;
                m_ShopCart.m_StrOrderNumber = m_StrPosOrderNumber;
            }

            if (m_CustBtnProductSelected != null)
            {
                ShopMainList SoptMainListBuf = new ShopMainList();
                SoptMainListBuf.m_intImgId = 1;//1=checked,2=not checked
                SoptMainListBuf.m_intSID = m_CustBtnProductSelected.m_intSID;
                SoptMainListBuf.m_StrName = m_CustBtnProductSelected.GetText();
                SoptMainListBuf.m_dblPrice = (double)m_CustBtnProductSelected.m_intPrice;

                SoptMainListBuf.m_intAmount = 1;
                SoptMainListBuf.m_dblSum = SoptMainListBuf.m_intAmount * SoptMainListBuf.m_dblPrice;
                SoptMainListBuf.m_intitem_no = m_ShopCart.m_intItemNoCount;
                SoptMainListBuf.m_Strproduct_code = m_CustBtnProductSelected.m_StrProductCode;
                SoptMainListBuf.m_Strdel_flag = "N";

                SoptMainListBuf.m_Stritem_type = m_CustBtnProductSelected.m_Strproduct_type;
                if (m_CustBtnProductSelected.m_inttax_sid != 0)
                {
                    SoptMainListBuf.m_inttax_sid = m_CustBtnProductSelected.m_inttax_sid;
                    SoptMainListBuf.m_inttax_rate = m_CustBtnProductSelected.m_inttax_rate;
                    SoptMainListBuf.m_Strtax_type = m_CustBtnProductSelected.m_Strtax_type;
                }
                else
                {
                    for (int i = 0; i < SqliteDataAccess.m_tax_data.Count; i++)
                    {
                        if (SqliteDataAccess.m_company[0].def_tax_sid == SqliteDataAccess.m_tax_data[i].SID)
                        {
                            SoptMainListBuf.m_inttax_sid = SqliteDataAccess.m_tax_data[i].SID;
                            SoptMainListBuf.m_inttax_rate = (int)SqliteDataAccess.m_tax_data[i].tax_rate;
                            SoptMainListBuf.m_Strtax_type = SqliteDataAccess.m_tax_data[i].tax_type;
                            break;
                        }
                    }
                }


                m_ShopCart.m_ShopMainList.Add(SoptMainListBuf);
                m_ShopCart.m_intItemNoCount++;

                /*
                String SQL = String.Format("INSERT INTO order_content_data (order_no,item_no,item_type,item_code,item_sid,item_name,item_cost,item_count,item_subtotal,tax_sid,tax_rate,tax_type) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}');",
                m_StrPosOrderNumber, SoptMainListBuf.m_intitem_no, SoptMainListBuf.m_Stritem_type, SoptMainListBuf.m_Strproduct_code, SoptMainListBuf.m_intSID, SoptMainListBuf.m_StrName, SoptMainListBuf.m_dblPrice, SoptMainListBuf.m_intAmount, SoptMainListBuf.m_dblSum, SoptMainListBuf.m_inttax_sid, SoptMainListBuf.m_inttax_rate, SoptMainListBuf.m_Strtax_type);
                */
                String Strsubtotal_flag = "N";
                int intcondiment_price = 0;
                int intitem_subtotal = (int)(SoptMainListBuf.m_intAmount * SoptMainListBuf.m_dblPrice) + intcondiment_price;
                int intdiscount_fee = 0;
                int intitem_amount = intitem_subtotal - intdiscount_fee;
                int inttax_fee = (int)Tax_fun.calculate(intitem_amount, SoptMainListBuf.m_inttax_rate, 0);//intitem_amount * SoptMainListBuf.m_inttax_rate / 100;

                String SQL = String.Format("INSERT INTO order_content_data (order_no,item_no,item_type,item_code,item_sid,item_name,item_cost,item_count,item_subtotal,tax_sid,tax_rate,tax_type,condiment_price,discount_fee,item_amount,tax_fee,subtotal_flag) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}');",
                m_StrPosOrderNumber, SoptMainListBuf.m_intitem_no, SoptMainListBuf.m_Stritem_type, SoptMainListBuf.m_Strproduct_code, SoptMainListBuf.m_intSID, SoptMainListBuf.m_StrName, SoptMainListBuf.m_dblPrice, SoptMainListBuf.m_intAmount, intitem_subtotal, SoptMainListBuf.m_inttax_sid, SoptMainListBuf.m_inttax_rate, SoptMainListBuf.m_Strtax_type, intcondiment_price, intdiscount_fee, intitem_amount, inttax_fee, Strsubtotal_flag);

                SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);
            }
        }

        public void ShopCartSubListAdd()
        {
            String Strsubtotal_flag = "N";
            int intcondiment_price = 0;
            int intitem_subtotal = 0;
            int intdiscount_fee = 0;
            int intitem_amount = 0;
            int inttax_fee = 0;

            if (m_ShopcartItemSelected!=null)
            {
                int intMainindex = -1;
                int intSubindex = -1;
                String StrBuf = m_ShopcartItemSelected.id;
                if ((StrBuf != null) && (StrBuf.Length > 0))
                {
                    string[] strs = StrBuf.Split(',');
                    intMainindex = Int32.Parse(strs[0]);
                    intSubindex = Int32.Parse(strs[1]);
                }

                if (intMainindex > -1)
                {
                    if (m_CustBtnCondimentSelected != null)
                    {
                        ShopSubList ShopSubListBuf = new ShopSubList();
                        ShopSubListBuf.m_intImgId = 3;//3=not expand,4=expand
                        ShopSubListBuf.m_intSID = m_CustBtnCondimentSelected.m_intSID;
                        ShopSubListBuf.m_StrName = m_CustBtnCondimentSelected.GetText();
                        ShopSubListBuf.m_dblPrice = (double)m_CustBtnCondimentSelected.m_intPrice;
                        ShopSubListBuf.m_intAmount = 1;
                        ShopSubListBuf.m_dblSum = ShopSubListBuf.m_intAmount * ShopSubListBuf.m_dblPrice;
                        ShopSubListBuf.m_intitem_no = m_ShopCart.m_intItemNoCount;
                        ShopSubListBuf.m_Strcondiment_code = m_CustBtnCondimentSelected.m_StrProductCode;

                        ShopSubListBuf.m_Stritem_type = m_CustBtnCondimentSelected.m_Strproduct_type;//類型

                        ShopSubListBuf.m_inttax_sid = m_CustBtnCondimentSelected.m_inttax_sid; //稅率編號 ; 產品若沒有稅率資料[m_tax_sid=0],就直接從company和tax_data取出預設值
                        ShopSubListBuf.m_inttax_rate = m_CustBtnCondimentSelected.m_inttax_rate; //稅率
                        ShopSubListBuf.m_Strtax_type = m_CustBtnCondimentSelected.m_Strtax_type;//稅率類型

                        bool blnRepeat = false;//重複項目判斷旗標

                        //---
                        //修正購物車中產品旗下調味品新增判斷是否為第一次的機制 at 202211101043
                        bool blnfirst = true;//UI畫面判斷是否為第一次新增配料旗標
                        for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList.Count; i++)
                        {
                            if (m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList[i].m_Strdel_flag != "Y")
                            {
                                blnfirst = false;
                                break;
                            }
                        }
                        //---修正購物車中產品旗下調味品新增判斷是否為第一次的機制

                        if (blnfirst)//第一次增調味品
                        {
                            blnRepeat = false;

                            ShopSubListBuf.m_intparent_item_no = m_ShopCart.m_ShopMainList[intMainindex].m_intitem_no;
                            ShopSubListBuf.m_Strdel_flag = "N";
                            m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList.Add(ShopSubListBuf);
                            m_ShopCart.m_intItemNoCount++;

                            String SQL = String.Format("INSERT INTO order_content_data (order_no,item_no,item_type,item_code,item_sid,item_name,item_cost,item_count,item_subtotal,parent_item_no,condiment_price,tax_sid,tax_rate,tax_type,discount_fee,item_amount,tax_fee,subtotal_flag) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}');",
                            m_StrPosOrderNumber, ShopSubListBuf.m_intitem_no, ShopSubListBuf.m_Stritem_type, ShopSubListBuf.m_Strcondiment_code, ShopSubListBuf.m_intSID, ShopSubListBuf.m_StrName, ShopSubListBuf.m_dblPrice, ShopSubListBuf.m_intAmount, intitem_subtotal, ShopSubListBuf.m_intparent_item_no, intcondiment_price, ShopSubListBuf.m_inttax_sid, ShopSubListBuf.m_inttax_rate, ShopSubListBuf.m_Strtax_type, intdiscount_fee, intitem_amount, inttax_fee, Strsubtotal_flag);

                            SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                            ShopcartListViewShow(2, intMainindex, m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList.Count - 1, 12);
                        }
                        else
                        {
                            //---
                            //相同群組調味品最大上限計數與相對限制功能
                            int intSameGroupCount = 0;
                            for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList.Count; i++)//計算目前相同群組調味品已選數量
                            {
                                if (m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList[i].m_Strdel_flag != "Y")
                                {
                                    for (int j = 0; j < m_CustBtnCondimentSelected.m_same_group_sid.Count; j++)
                                    {
                                        if (m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList[i].m_intSID == m_CustBtnCondimentSelected.m_same_group_sid[j])
                                        {
                                            intSameGroupCount++;
                                            break;
                                        }
                                    }
                                }
                            }

                            for (int i = 0; i < m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList.Count; i++)//判斷調味品是否重複
                            {
                                if (m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList[i].m_Strdel_flag != "Y")
                                {
                                    if (m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList[i].m_intSID == ShopSubListBuf.m_intSID)
                                    {
                                        blnRepeat = true;
                                        break;
                                    }
                                }
                            }
                            //---相同群組調味品最大上限計數與相對限制功能

                            if ((!blnRepeat) && (intSameGroupCount < m_CustBtnCondimentSelected.m_max_count))//if (!blnRepeat)
                            {
                                ShopSubListBuf.m_intImgId = m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList[0].m_intImgId;

                                ShopSubListBuf.m_intparent_item_no = m_ShopCart.m_ShopMainList[intMainindex].m_intitem_no;
                                ShopSubListBuf.m_Strdel_flag = "N";
                                m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList.Add(ShopSubListBuf);
                                m_ShopCart.m_intItemNoCount++;

                                String SQL = String.Format("INSERT INTO order_content_data (order_no,item_no,item_type,item_code,item_sid,item_name,item_cost,item_count,item_subtotal,parent_item_no,condiment_price,tax_sid,tax_rate,tax_type,discount_fee,item_amount,tax_fee,subtotal_flag) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}');",
                                m_StrPosOrderNumber, ShopSubListBuf.m_intitem_no, ShopSubListBuf.m_Stritem_type, ShopSubListBuf.m_Strcondiment_code, ShopSubListBuf.m_intSID, ShopSubListBuf.m_StrName, ShopSubListBuf.m_dblPrice, ShopSubListBuf.m_intAmount, intitem_subtotal, ShopSubListBuf.m_intparent_item_no, intcondiment_price, ShopSubListBuf.m_inttax_sid, ShopSubListBuf.m_inttax_rate, ShopSubListBuf.m_Strtax_type, intdiscount_fee, intitem_amount, inttax_fee, Strsubtotal_flag);

                                SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                                if (ShopSubListBuf.m_intImgId == 3)
                                {
                                    ShopcartListViewShow(3, intMainindex, m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList.Count - 1, 12);
                                }
                                else
                                {
                                    String StrCheckBuf = intMainindex + ",-1";
                                    int intCheckIndex = -1;
                                    for (int i = 0; i < m_ShopcartItems.Count; i++)
                                    {
                                        String StrBuf00 = m_ShopcartItems[i].image_id;
                                        if (StrBuf00 == StrCheckBuf)
                                        {
                                            intCheckIndex = i;
                                            break;
                                        }
                                    }
                                    if (intCheckIndex >= 0)
                                    {
                                        /*jash stop 
                                        dgvmain001.Rows[intCheckIndex].Selected = true;
                                        dgvmain001Show(5, intMainindex, -1, 12);//刪除全部調味品
                                        dgvmain001.Rows[intCheckIndex].Selected = true;
                                        dgvmain001Show(6, intMainindex, -1, 12);//顯示展開全部調味品
                                        */
                                    }
                                }
                            }//if(!blnRepeat)
                        }//if(m_ShopCart.m_ShopMainList[intMainindex].m_ShopSubList.Count==0) else

                    }//if (m_CustBtnCondimentSelected != null)
                }//if(intMainindex>-1)

            }//if(dgvmain001.SelectedRows.Count>0)
        }


        public void PosOrderNumberUIShow()
        {

            VisitorsValueLable.Text = m_StrGuestsNumber;
            OrderNoValueLable.Text = m_StrPosOrderNumber;
            TaxIDValueLable.Text = m_StrCustEinNumber;

            /*jash stop
            buttmain064.Enabled = true;//桌號
            buttmain065.Enabled = true;//牌號

            buttmain066.Enabled = true;//取消交易
            buttmain068.Enabled = false;//清除畫面
            buttmain057.Enabled = false;//訂單作廢
            buttmain058.Enabled = false;//訂單補印

            buttmain067.Enabled = true; //折扣/折讓
            buttmain070.Enabled = true; //小計
            buttmain071.Enabled = true; //結算

            buttmain080.Visible = true;//發票載具
            buttmain081.Visible = true;//買受人統編
            */
        }
        //---顯示訂單號參數

        public static bool m_blnShowDailyQuestion = false;//自動營業關帳提示訊息旗標
        public async void ShowDailyQuestionMsg()//自動營業關帳提示訊息
        {
            if (!m_blnShowDailyQuestion)
            {
                return;
            }

            m_blnShowDailyQuestion = false;
            GetClassDailyLastTime();
            DateTime DTHasDaily = (m_StrHasDaily.Length > 0) ? Convert.ToDateTime(m_StrHasDaily) : DateTime.Now;
            TimeSpan ts = DateTime.Now - DTHasDaily;
            Double dblTotalDays = ts.TotalDays;
            if (dblTotalDays > 2)
            {
                QuesMessageBox QuestionMsgBuf = new QuesMessageBox($"您已經超過{(int)(dblTotalDays)}日以上未執行[營業關帳]作業,是否要直接執行[營業關帳]呢?");
                await this.ShowPopupAsync(QuestionMsgBuf);
                if (QuesMessageBox.m_blnResult)
                {
                    /*jash stop
                    ClosingHandover ClosingHandoverBuf = new ClosingHandover("營業關帳", false);
                    ClosingHandoverBuf.ShowDialog();
                    */
                }
            }
        }

        public bool funcMainSet(int intMode = 0)//操作介面功能啟用與否設定模組
        {
            bool blnResult = true;
            switch (intMode)
            {
                case 0:
                    //---
                    //新增訂單權限控管機制
                    if (m_funcMain.Count > 0)
                    {
                        for (int i = 0; i < m_funcMain.Count; i++)
                        {
                            if (m_funcMain[i].m_StrSID == "bill_add")
                            {
                                if (!m_funcMain[i].m_blnEenabe)
                                {
                                    blnResult = m_funcMain[i].m_blnEenabe;
                                }
                                break;
                            }
                        }
                    }
                    //---新增訂單權限控管機制
                    break;
                default://以上都不符合走這個
                    for (int i = 0; i < m_funcMain.Count; i++)
                    {
                        switch (m_funcMain[i].m_StrSID)
                        {
                            case "bill_cancel"://取消交易
                                //jash stop buttmain066.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "bill_discount"://自訂義折扣/折讓 啟動與否
                                m_blnBillDiscount = m_funcMain[i].m_blnEenabe;
                                break;
                            case "bill_discount_area"://優惠專區折扣/讓 啟動與否 
                                m_blnBillDiscountArea = m_funcMain[i].m_blnEenabe;
                                break;
                            case "bill_reprint"://補印單據
                                //jash stop buttmain058.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "bill_search"://訂單查詢
                                //jash stop buttmain056.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "bill_voided"://訂單作廢
                                //jash stop buttmain057.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "class_change"://交班作業
                                //jash stop buttmain059.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "cloud_report"://雲端報表查詢
                                //jash stop m_blnSysMenu[2] = m_funcMain[i].m_blnEenabe;
                                break;
                            case "cust_display_setting"://客顯資料管理
                                //buttmain059.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "daily_close"://營業關帳
                                //jash stop buttmain060.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "data_sync"://資料同步更新
                                //jash stop m_blnSysMenu[3] = m_funcMain[i].m_blnEenabe;
                                break;
                            case "device_setting"://週邊設備管理
                                //jash stop m_blnSysMenu[1] = m_funcMain[i].m_blnEenabe;
                                break;
                            case "env_setting"://基本參數設定
                                //jash stop m_blnSysMenu[0] = m_funcMain[i].m_blnEenabe;
                                break;
                            case "expense_record"://收支紀錄
                                //jash stop buttmain061.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "meal_num_select"://牌號選擇
                                //jash stop buttmain065.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "open_cash_box"://開啟錢箱
                                //jash stop buttmain069.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "packages_select"://包材選擇
                                //jash stop buttmain048.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "report"://報表管理
                                //jash stop buttmain063.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "sale"://銷售管理
                                //buttmain063.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "system"://環境設定
                                //buttmain063.Visible = m_funcMain[i].m_blnEenabe;
                                break;
                            case "table_select"://桌號選擇
                                //jash stop buttmain064.Visible = m_funcMain[i].m_blnEenabe;
                                break;

                        }
                    }
                    break;
            }

            //jash stop buttmain067.Visible = m_blnBillDiscount | m_blnBillDiscountArea;

            return blnResult; ;
        }

        public void ShopCartVarClear()//清空購物車相關變數
        {
            m_intOrderState = 0;
            m_StrPosOrderNumber = "";
            m_StrCustEinNumber = "";//紀錄客戶統一編號
            m_StrCustCarrierNumber = "";//紀錄客戶發票載具
            m_StrEasyCardPhysicalID = "";//紀錄交易悠遊卡內碼(發票載具)
            m_StrLinePayCarrierNumber = "";//紀錄LinePay的paymentSID(發票載具)
            m_ShopCart = null;
        }

        public async Task<int> PosOrderNumberCreatUIInitAsync()
        {
            int intResult = 0;

            if (SqliteDataAccess.m_terminal_data[0].invoice_active_state == "Y")//判斷是否要開立電子發票
            {
                if ((POS_INVAPI.m_InvUseInfo == null) || ((POS_INVAPI.m_InvUseInfo != null) && (Convert.ToInt32(POS_INVAPI.m_InvUseInfo.Total_Count.ToString()) == 0)))//確認目前電子發票狀態
                {
                    MessageBox MsgBuf = null;
                    if (POS_INVAPI.m_InvUseInfo != null)
                    {
                        MsgBuf = new MessageBox($"電子發票資料錯誤,所以無法建立訂單\n回傳代碼:{POS_INVAPI.m_InvUseInfo.Ret_Code}\n回傳資訊:{POS_INVAPI.m_InvUseInfo.Ret_Msg}");
                    }
                    else
                    {
                        MsgBuf = new MessageBox("電子發票資料錯誤,所以無法建立訂單");
                    }

                    await this.ShowPopupAsync(MsgBuf);
                    intResult = 1;
                    return intResult;
                }
            }

            //---
            //新增訂單權限控管機制
            if (!funcMainSet(0))
            {
                MessageBox MsgBuf = new MessageBox("您無[新增訂單]的權限");
                await this.ShowPopupAsync(MsgBuf);
                intResult = 1;
                return intResult;
            }
            //---新增訂單權限控管機制

            if (m_intOrderTypeIdSelected < 0)
            {
                MessageBox MsgBuf = new MessageBox("請先選擇訂單類型,才能建立訂單");
                await this.ShowPopupAsync(MsgBuf);
                intResult = 1;
                return intResult;
            }

            //---
            //整合建立訂單編號字串功能
            if (SystemNumberCreate() == 0)
            {

                PosOrderNumberUIShow();//顯示訂單號參數
                return intResult;
            }
            else
            {
                //MessageBox.Show("超過測試次數,訂單號建立失敗", "訂單號建立失敗", MessageBoxButtons.OK, MessageBoxIcon.Error);
                MessageBox MsgBuf = new MessageBox("超過測試次數,訂單號建立失敗");
                await this.ShowPopupAsync(MsgBuf);
                intResult = 1;
                return intResult;
            }
            //---整合建立訂單編號字串功能
        }

        public void NotOrderUIInit(bool blnLeftButtInit = true)//沒有訂單號時 畫面初始化
        {

            /*jash stop
            txtmain001.Visible = false;//隱藏元件訂單備註顯示
            txtmain002.Visible = false;//隱藏元件促銷資訊
            OrderStatusLable.Text = "無訂單";
            VisitorsValueLable.Text = m_StrGuestsNumber; //來客數
            DiscountValueLable.Text = String.Format("{0} : {1}", "促銷/折扣", "");
            QuantityValueLable.Text = String.Format("{0} : {1}", "訂單數量", "");
            ReceivableValueLable.Text = String.Format("{0} : {1}", "應收金額", "");
            ChangeValueLable.Text = "";//付款資訊

            dgvmain001Clean();//購物車清空
            if (blnLeftButtInit)
            {
                productButtonInitHide();//產品按鈕初始化
                condimentButtonInitHide();//調味品按鈕初始化
                categoryButtonInitShow();//產品類別按鈕初始化
            }

            laborderInformationInit();//訂單資訊初始化
            orderButtonInitShow();//訂單按鈕初始化
            quantityButtonEnableStateSet();//購物車數量調整按鈕初始化

            buttmain064.Enabled = false;//桌號
            buttmain065.Enabled = false;//牌號

            buttmain066.Enabled = false;//取消交易
            buttmain068.Enabled = false;//清除畫面
            buttmain057.Enabled = false;//訂單作廢
            buttmain058.Enabled = false;//訂單補印

            buttmain067.Enabled = false; //折扣/折讓
            buttmain070.Enabled = false; //小計
            buttmain071.Enabled = false; //結算
            */
        }

        public int AfterPaymentUIInit()//結完帳UI初始化 & 加速進行下一訂單開啟的流程
        {
            int intResult = 0;
            if (m_intOrderState != 0)
            {
                if (m_intOrderState == 1)//已結帳完成才能執行
                {
                    NotOrderUIInit(false);//沒有訂單號時 畫面初始化

                    ShopCartVarClear();//清空購物車相關變數

                    intResult = 0;
                }
                else
                {
                    intResult = 1;
                }
            }
            return intResult;
        }

        //---
        //外送平台串接資料
        public static VTSTORE_params m_VTSTORE_params = new VTSTORE_params();//點點食
        public static NIDIN_POS_params m_NIDIN_POS_params = new NIDIN_POS_params();//你訂
        public static UBER_EATS_params m_UBER_EATS_params = new UBER_EATS_params();//吳柏毅
        public static FOODPANDA_params m_FOODPANDA_params = new FOODPANDA_params();//熊貓
        public static YORES_POS_params m_YORES_POS_params = new YORES_POS_params();//享什麼
        public static void takeaways_params2Var()
        {
            SQLDataTableModel.takeaways_paramsLoad();
            if (SQLDataTableModel.m_takeaways_params != null)
            {
                for (int i = 0; i < SQLDataTableModel.m_takeaways_params.Rows.Count; i++)
                {
                    switch (SQLDataTableModel.m_takeaways_params.Rows[i]["SID"].ToString())
                    {
                        case "VTSTORE":
                            m_VTSTORE_params = JsonClassConvert.VTSTORE_params2Class(SQLDataTableModel.m_takeaways_params.Rows[i]["params"].ToString());
                            break;
                        case "NIDIN_POS":
                            m_NIDIN_POS_params = JsonClassConvert.NIDIN_POS_params2Class(SQLDataTableModel.m_takeaways_params.Rows[i]["params"].ToString());
                            break;
                        case "UBER_EATS":
                            m_UBER_EATS_params = JsonClassConvert.UBER_EATS_params2Class(SQLDataTableModel.m_takeaways_params.Rows[i]["params"].ToString());
                            break;
                        case "FOODPANDA":
                            m_FOODPANDA_params = JsonClassConvert.FOODPANDA_params2Class(SQLDataTableModel.m_takeaways_params.Rows[i]["params"].ToString());
                            break;
                        case "YORES_POS":
                            m_YORES_POS_params = JsonClassConvert.YORES_POS_params2Class(SQLDataTableModel.m_takeaways_params.Rows[i]["params"].ToString());
                            break;
                    }
                }
            }
        }
        //---外送平台串接資料

        //---
        //新增建立系統號碼字串函數
        public static int NowClassDataGet()//取得目前班別
        {
            String SQL = "";
            int intResult = 0;
            if (SqliteDataAccess.m_class_data.Count == 0)
            {
                intResult = 1;//沒有班別資料
            }

            if (SqliteDataAccess.m_terminal_data[0].now_class_sid == "0")
            {
                SQL = String.Format("UPDATE terminal_data SET now_class_sid = '{0}'", SqliteDataAccess.m_class_data[0].SID);
                SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                SqliteDataAccess.m_terminal_data = SqliteDataAccess.terminal_dataLoad();
            }

            for (int j = 0; j < SqliteDataAccess.m_class_data.Count; j++)
            {
                /*
                DateTime dt1 = Convert.ToDateTime(SqliteDataAccess.m_class_data[j].time_start);
                DateTime dt2 = Convert.ToDateTime(SqliteDataAccess.m_class_data[j].time_end);
                DateTime dt3 = Convert.ToDateTime(DateTime.Now.ToString("HH:mm"));
                if ((DateTime.Compare(dt2, dt3) >= 0) && (DateTime.Compare(dt3, dt1) >= 0))
                {
                    m_intClassSid = SqliteDataAccess.m_class_data[j].SID;
                    m_StrClassName = SqliteDataAccess.m_class_data[j].class_name;
                    break;
                }
                */

                if (SqliteDataAccess.m_terminal_data[0].now_class_sid == SqliteDataAccess.m_class_data[j].SID.ToString())
                {
                    m_intClassSid = SqliteDataAccess.m_class_data[j].SID;
                    m_StrClassName = SqliteDataAccess.m_class_data[j].class_name;
                    break;
                }
            }

            return intResult;
        }

        public static int SystemNumberCreate(int intType = 0)
        {
            int intResult = 0;
            String StrGuid = Guid.NewGuid().ToString().Replace("-", "").ToUpper();

            switch (intType)
            {
                case 0://ORDER_DATA
                    if (m_StrPosOrderNumber.Length == 0)
                    {
                        m_StrPosOrderNumber = PosOrderNumberCreate(StrGuid); //UI顯示班別資訊
                        if (m_StrPosOrderNumber.Length == 0)
                        {
                            intResult = 1;//建立失敗
                        }
                        else
                        {
                            intResult = 0;//建立成功
                        }
                    }
                    else
                    {
                        intResult = 0;//已存在不用建立
                    }
                    break;

                case 1://DAILY_REPORT
                    PosReportNumberCreate(StrGuid, intType);
                    if (m_StrPosReportNumber.Length == 0)
                    {
                        intResult = 1;//建立失敗
                    }
                    else
                    {
                        intResult = 0;//建立成功
                    }
                    break;

                case 2://CLASS_REPORT
                    PosReportNumberCreate(StrGuid, intType);
                    if (m_StrPosReportNumber.Length == 0)
                    {
                        intResult = 1;//建立失敗
                    }
                    else
                    {
                        intResult = 0;//建立成功
                    }
                    break;

                case 3://EXPENSE_DATA
                    PosExpenseNumberCreate(StrGuid);
                    if (m_StrPosExpenseNumber.Length == 0)
                    {
                        intResult = 1;//建立失敗
                    }
                    else
                    {
                        intResult = 0;//建立成功
                    }
                    break;
            }



            return intResult;
        }

        public static String SerialCodeDataGet(String StrGUID, int intType)
        {
            String SQL = "";
            String StrResultNumber = "";
            String StrSerialName = "";
            switch (intType)
            {
                case 0://PosOrderNumber
                    StrSerialName = "ORDER_DATA";
                    break;
                case 1://DAILY_REPORT
                    StrSerialName = "DAILY_REPORT";
                    break;
                case 2://CLASS_REPORT
                    StrSerialName = "CLASS_REPORT";
                    break;
                case 3://EXPENSE_REPORT
                    StrSerialName = "EXPENSE_DATA";
                    break;
            }

            SqliteDataAccess.m_serial_code_data = SqliteDataAccess.serial_code_dataLoad();//載入最新資料,以便進行比對

            if (SqliteDataAccess.m_serial_code_data.Count > 0)
            {
                for (int i = 0; i < SqliteDataAccess.m_serial_code_data.Count; i++)
                {
                    if (SqliteDataAccess.m_serial_code_data[i].serial_name == StrSerialName)
                    {
                        //---
                        //取得規則資料
                        String Strcode_first_charBuf = SqliteDataAccess.m_serial_code_data[i].code_first_char;
                        String Strcode_split_charrBuf = SqliteDataAccess.m_serial_code_data[i].code_split_char;
                        int intcode_num_lenBuf = SqliteDataAccess.m_serial_code_data[i].code_num_len;
                        //---取得規則資料

                        //----
                        //組合出今天serial_code_data資料表 的 code_str欄位資料
                        Strcode_first_charBuf = Strcode_first_charBuf.Replace("[YEAR]", "yyyy");
                        Strcode_first_charBuf = Strcode_first_charBuf.Replace("[MONTH]", "MM");
                        Strcode_first_charBuf = Strcode_first_charBuf.Replace("[DAY]", "dd");
                        Strcode_first_charBuf = Strcode_first_charBuf.Replace("[HOUR]", "HH");
                        Strcode_first_charBuf = Strcode_first_charBuf.Replace("[MINUTE]", "mm");
                        String[] strs = Strcode_first_charBuf.Split("yyyy");
                        String StrHead = strs[0];
                        Strcode_first_charBuf = "yyyy" + strs[1];
                        String StrNowcode_str = StrHead + DateTime.Now.ToString(Strcode_first_charBuf);
                        //---組合出今天serial_code_data資料表 的 code_str欄位資料

                        //---
                        //比對code_str欄位資料
                        int intNowcode_num = 0;
                        String StrNowcode_num = "";
                        String Strcode_str = SqliteDataAccess.m_serial_code_data[i].code_str;
                        int intcode_num = SqliteDataAccess.m_serial_code_data[i].code_num;

                        if (StrNowcode_str == Strcode_str)
                        {
                            intNowcode_num = intcode_num + 1;
                        }
                        else
                        {
                            intNowcode_num = 1;
                        }
                        //---比對code_str欄位資料

                        StrNowcode_num = "" + intNowcode_num;
                        StrResultNumber = String.Format("{0}{1}{2}", StrNowcode_str, Strcode_split_charrBuf, StrNowcode_num.PadLeft(intcode_num_lenBuf, '0'));

                        //---
                        //更新serial_code_data資料表紀錄
                        SQL = String.Format("UPDATE serial_code_data SET code_str = '{0}', code_num = '{1}', updated_time = '{2}', serial_owner='{3}' WHERE serial_name = '{4}';", StrNowcode_str, intNowcode_num, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), StrGUID, StrSerialName);
                        SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);
                        //---更新serial_code_data資料表紀錄

                        break;//跳離for
                    }//if (SqliteDataAccess.m_serial_code_data[i].serial_name == "DAILY_REPORT")
                }//for (int i = 0; i < SqliteDataAccess.m_serial_code_data.Count; i++)
            }//if (SqliteDataAccess.m_serial_code_data.Count > 0)

            return StrResultNumber;
        }

        public static void SerialCodeDataInit(String StrGUID)
        {
            String SQL = "";
            SqliteDataAccess.m_serial_code_data.Clear();
            SqliteDataAccess.m_serial_code_data = SqliteDataAccess.serial_code_dataLoad();
            if (SqliteDataAccess.m_serial_code_data.Count == 0)
            {
                SQL = String.Format("INSERT INTO serial_code_data (serial_type,serial_name,code_first_char,code_split_char,code_num_len,code_str,code_num,serial_owner,updated_time) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
                    "ORDER_DATA", "ORDER_DATA", "[YEAR][MONTH][DAY]", "-", "4", DateTime.Now.ToString("yyyMMdd"), 0, StrGUID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                SQL = String.Format("INSERT INTO serial_code_data (serial_type,serial_name,code_first_char,code_split_char,code_num_len,code_str,code_num,serial_owner,updated_time) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
                    "DAILY_REPORT", "DAILY_REPORT", "DR-[YEAR][MONTH]", "", "3", "DR-" + DateTime.Now.ToString("yyyMM"), 0, StrGUID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                SQL = String.Format("INSERT INTO serial_code_data (serial_type,serial_name,code_first_char,code_split_char,code_num_len,code_str,code_num,serial_owner,updated_time) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
                    "CLASS_REPORT", "CLASS_REPORT", "CR-[YEAR][MONTH]", "", "3", "CR-" + DateTime.Now.ToString("yyyMM"), 0, StrGUID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                SQL = String.Format("INSERT INTO serial_code_data (serial_type,serial_name,code_first_char,code_split_char,code_num_len,code_str,code_num,serial_owner,updated_time) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
                "EXPENSE_DATA", "EXPENSE_DATA", "[YEAR][MONTH][DAY]", "", "4", DateTime.Now.ToString("yyyMMdd"), 0, StrGUID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                SqliteDataAccess.m_serial_code_data = SqliteDataAccess.serial_code_dataLoad();
            }
        }

        public static void PosExpenseNumberCreate(String StrGUID)
        {
            String SQL = "";
            m_StrPosExpenseNumber = "";

            //---
            //產生收支號的主流程
            int intErrorTestCount = 0;
            do
            {
                String StrPosExpenseNumberBuf = SerialCodeDataGet(StrGUID, 3);
                SQL = String.Format("SELECT expense_no FROM expense_data WHERE expense_no='{0}' LIMIT 0,1;", StrPosExpenseNumberBuf);
                DataTable expense_dataDataTable = SQLDataTableModel.GetDataTable(SQL);
                if ((expense_dataDataTable != null) && (expense_dataDataTable.Rows.Count > 0))
                {
                    expense_dataDataTable.Clear();
                }
                else
                {
                    m_StrPosExpenseNumber = StrPosExpenseNumberBuf;//紀錄產生的新訂單號
                    break;//跳離do-while
                }

                intErrorTestCount++;
            } while (intErrorTestCount <= m_intExpenseNumberTestMaxCount);
            //---產生收支號的主流程

        }

        public static void PosReportNumberCreate(String StrGUID, int type)
        {
            String SQL = "";
            m_StrPosReportNumber = "";

            //---
            //產生報表號的主流程
            int intErrorTestCount = 0;
            do
            {
                String StrResult = "";//String StrPosReportNumberBuf = SerialCodeDataGet(StrGUID, type);
                if (type == 1)//關帳
                {
                    //jash stop StrResult = (SysParmUI.m_pos_serial_paramBuf.order_no_from == "S") ? HttpGetDailyNo() : SerialCodeDataGet(StrGUID, 1);
                }
                else//交班
                {
                    //jash stop StrResult = (SysParmUI.m_pos_serial_paramBuf.order_no_from == "S") ? HttpGetClassNo() : SerialCodeDataGet(StrGUID, 2);
                }

                if (StrResult.Length == 0)
                {
                    intErrorTestCount++;
                    if (intErrorTestCount <= m_intReportNumberTestMaxCount)
                    {
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }
                SQL = String.Format("SELECT report_no FROM daily_report WHERE report_no='{0}' LIMIT 0,1;", StrResult);
                DataTable daily_reportDataTable = SQLDataTableModel.GetDataTable(SQL);
                if ((daily_reportDataTable != null) && (daily_reportDataTable.Rows.Count > 0))
                {
                    daily_reportDataTable.Clear();
                }
                else
                {
                    m_StrPosReportNumber = StrResult;//紀錄產生的新訂單號
                    break;//跳離do-while
                }

                intErrorTestCount++;
            } while (intErrorTestCount <= m_intReportNumberTestMaxCount);
            //---產生報表號的主流程

        }

        public static String PosOrderNumberCreate(String StrGUID)
        {
            String StrResult = "";
            int intclass_sid = 0;
            String Strclass_name = "";
            String SQL = "";

            //---
            //產生訂單號的主流程
            int intErrorTestCount = 0;
            do
            {
                StrResult = (false) ? HttpGetOrderNo() : SerialCodeDataGet(StrGUID, 0); //jash stop StrResult = (SysParmUI.m_pos_serial_paramBuf.order_no_from == "S") ? HttpGetOrderNo() : SerialCodeDataGet(StrGUID, 0);
                if (StrResult.Length == 0)
                {
                    intErrorTestCount++;
                    if (intErrorTestCount <= m_intOrderNumberTestMaxCount)
                    {
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }
                SQL = String.Format("SELECT order_no FROM order_data WHERE order_no='{0}' LIMIT 0,1;", StrResult);
                DataTable order_dataDataTable = SQLDataTableModel.GetDataTable(SQL);
                if ((order_dataDataTable != null) && (order_dataDataTable.Rows.Count > 0))
                {
                    order_dataDataTable.Clear();
                }
                else
                {
                    //停用直接賦予值 因為有可能取號是為了別的設備 m_StrPosOrderNumber = StrResult;//紀錄產生的新訂單號

                    SQL = String.Format("UPDATE terminal_data SET last_order_no = '{0}'", StrResult);
                    SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);

                    //---
                    //新增一筆order_data資料
                    String Strorder_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");

                    NowClassDataGet();//取得目前班別
                    intclass_sid = m_intClassSid;
                    Strclass_name = m_StrClassName;

                    //訂單狀態(order_state) 0:訂購中,1:已結帳 2: 暫存中
                    //點單模式(order_mode) L:本機點單,O:線上點單 S:自助點單
                    //取號來源(order_no_from) (C:Cloud ,L:Local,S:主定的主機)
                    //付款狀態(paid_flag) Y: 已付款
                    //實收現金金額(cash_fee) - 沒有在使用 ,有在使用的是 order_payment_data 的 received_fee [order_payment_data 的 amount 是紀錄該筆的支付金額]
                    //找零金額(change_fee) - 沒有在使用 ,有在使用的是 order_payment_data 的 change_fee
                    //paid_time
                    //paid_info
                    //class_sid
                    //class_name - 班別
                    //user_sid - 從user_data&登入比對取得
                    //employee_no - 從user_data&登入比對取得
                    //call_num - 取餐號
                    //business_day - 營業日 [terminnal_data.business_day]

                    //VisitorsValueLable.Text = Strclass_name; //UI顯示班別資訊
                    String business_day = Convert.ToDateTime(SqliteDataAccess.m_terminal_data[0].business_day).ToString("yyyy-MM-dd");

                    SQL = String.Format("INSERT INTO order_data (order_open_time,order_no, order_no_from, order_time,terminal_sid,class_sid,user_sid,created_time,updated_time,pos_no,order_state,order_mode,paid_flag,class_name,order_type,order_type_name,order_type_code,business_day,employee_no,upload_time,cancel_time,cancel_upload_time,paid_time) VALUES ('{1}','{0}', 'L', '{1}','{4}',{2},{3},'{1}','{1}','{5}',0,'L','N','{6}','{7}','{8}','{9}','{10}','{11}','1970-01-01','1970-01-01','1970-01-01','1970-01-01');", StrResult, Strorder_time, intclass_sid, m_StrUserSID, SqliteDataAccess.m_terminal_data[0].SID, SqliteDataAccess.m_terminal_data[0].pos_no, Strclass_name, m_intOrderTypeIdSelected, m_StrOrderTypeNameSelected, m_StrOrderTypeCodeSelected, business_day, m_StrEmployeeNo);
                    SQLDataTableModel.SQLiteInsertUpdateDelete(SQL);
                    //---新增一筆order_data資料

                    break;//跳離do-while
                }

                intErrorTestCount++;
            } while (intErrorTestCount <= m_intOrderNumberTestMaxCount);
            //---產生訂單號的主流程

            return StrResult;
        }

        //---新增建立系統號碼字串函數

        public static String m_StrHasDaily = "";
        public static DateTime m_ClassLastTime = DateTime.Now;//最後一次執行交班時間
        public static DateTime m_DailyLastTime = DateTime.Now;//最後一次執行關帳時間

        public static DateTime m_ClassOrderFirstTime = DateTime.Now;
        public static DateTime m_ClassOrderLastTime = DateTime.Now;

        public static DateTime m_DailyOrderFirstTime = DateTime.Now;
        public static DateTime m_DailyOrderLastTime = DateTime.Now;

        public static void GetClassDailyLastTime()//抓取 最後一次執行交班時間 & 最後一次執行關帳時間
        {
            /*
            SELECT 
	            SUM(class_last_time) AS class_last_time,
	            SUM(daily_last_time) AS daily_last_time  
            FROM 
	            (
	            SELECT 
		            STRFTIME('%s',MAX(report_time)) AS class_last_time,
		            0 AS daily_last_time 
		            FROM daily_report 
		            WHERE report_type='C' 
	            UNION 
	            SELECT 
		            0 AS class_last_time,
		            STRFTIME('%s',MAX(report_time)) AS daily_last_time 
		            FROM daily_report 
		            WHERE report_type='D'
	            ); 
            */
            String SQL = "SELECT SUM(class_last_time) AS class_last_time,SUM(daily_last_time) AS daily_last_time  FROM (SELECT STRFTIME('%s',MAX(report_time)) AS class_last_time,0 AS daily_last_time FROM daily_report WHERE report_type='C' UNION SELECT 0 AS class_last_time,STRFTIME('%s',MAX(report_time)) AS daily_last_time FROM daily_report WHERE report_type='D')";
            DataTable dt = SQLDataTableModel.GetDataTable(SQL);

            // 紀錄最後的交班時間及關帳時間
            m_ClassLastTime = TimeConvert.UnixTimeStampToDateTime(Convert.ToDouble(dt.Rows[0][0].ToString()), false);
            m_DailyLastTime = TimeConvert.UnixTimeStampToDateTime(Convert.ToDouble(dt.Rows[0][1].ToString()), false);
            // 若交班的最後時間,小於關帳時間,就使用關帳時間做為期使時間
            if (DateTime.Compare(m_ClassLastTime, m_DailyLastTime) < 0)
            {
                m_ClassLastTime = m_DailyLastTime;
            }

            SQL = "SELECT business_day FROM terminal_data LIMIT 0,1";
            dt = SQLDataTableModel.GetDataTable(SQL);
            m_StrHasDaily = Convert.ToDateTime(dt.Rows[0][0].ToString()).ToString("yyyy-MM-dd HH:mm:ss.fff");

            /*
            SQL = String.Format("SELECT MIN(order_time) AS order_first_time,MAX(order_time) AS order_last_time FROM order_data WHERE order_time >='{0}' AND order_time <='{1}' AND daily_close_flag != 'Y'", m_DailyLastTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            dt = SQLDataTableModel.GetDataTable(SQL);
            if((dt!=null)&&(dt.Rows.Count > 0))
            {
                m_DailyOrderFirstTime = (dt.Rows[0][0].ToString().Length>0)? Convert.ToDateTime(dt.Rows[0][0].ToString()) : DateTime.Now;
                m_DailyOrderLastTime = (dt.Rows[0][1].ToString().Length > 0)? Convert.ToDateTime(dt.Rows[0][1].ToString()) : DateTime.Now;
            }

            SQL = String.Format("SELECT MIN(order_time) AS order_first_time,MAX(order_time) AS order_last_time FROM order_data WHERE order_time >='{0}' AND order_time <='{1}' AND class_close_flag != 'Y'", m_ClassLastTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            dt = SQLDataTableModel.GetDataTable(SQL);
            if ((dt != null) && (dt.Rows.Count > 0))
            {
                m_ClassOrderFirstTime = (dt.Rows[0][0].ToString().Length > 0) ? Convert.ToDateTime(dt.Rows[0][0].ToString()) : DateTime.Now;
                m_ClassOrderLastTime = (dt.Rows[0][1].ToString().Length > 0) ? Convert.ToDateTime(dt.Rows[0][1].ToString()) : DateTime.Now;
            }
            */
            m_DailyOrderFirstTime = m_DailyLastTime;
            m_DailyOrderLastTime = DateTime.Now;
            m_ClassOrderFirstTime = m_ClassLastTime;
            m_ClassOrderLastTime = DateTime.Now;
        }


        public bool HttpObjectInit(ref bool blnServerMode)//Http 服務相關元件初始化
        {
            bool blnResult = true;
            /*jash stop
            SysParmUI.SysParmUIMemberVarSet();//讀取 取號方式(Server/Local 方式) & KDS參數
            if (SysParmUI.m_pos_serial_paramBuf.terminal_server_flag == "Y")//啟動服務
            {
                blnServerMode = true;
                blnResult = HttpServerThread.Start(Convert.ToInt32(SysParmUI.m_pos_serial_paramBuf.terminal_server_port));
            }
            else
            {
                blnServerMode = false;
                if (SysParmUI.m_pos_serial_paramBuf.order_no_from == "S")//主機取號
                {
                    //單純主機IP&PORT連線測試
                    TcpClient tcpClient = new TcpClient();
                    try
                    {
                        tcpClient.Connect(SysParmUI.m_pos_serial_paramBuf.serial_server_name, SysParmUI.m_pos_serial_paramBuf.serial_server_port);
                        tcpClient.Close();
                        blnResult = true;
                    }
                    catch
                    {
                        blnResult = false;
                    }
                    tcpClient = null;
                }
            }
            */
            return blnResult;
        }

        public static String HttpGetOrderNo()
        {
            String StrResult = "";
            /*jash stop
            String StrDomain = $"http://{SysParmUI.m_pos_serial_paramBuf.serial_server_name}:{SysParmUI.m_pos_serial_paramBuf.serial_server_port}/";
            String StrBuf = HttpsFun.RESTfulAPI_get(StrDomain, "getorderno", "", "", "");
            getorderno getordernoBuf = JsonClassConvert.getorderno2Class(StrBuf);
            if (getordernoBuf != null)
            {
                StrResult = getordernoBuf.orderno;
            }
            */
            return StrResult;
        }

        public static String HttpGetDailyNo()
        {
            String StrResult = "";
            /*jash stop
            String StrDomain = $"http://{SysParmUI.m_pos_serial_paramBuf.serial_server_name}:{SysParmUI.m_pos_serial_paramBuf.serial_server_port}/";
            String StrBuf = HttpsFun.RESTfulAPI_get(StrDomain, "getdailyno", "", "", "");
            getdailyno getdailynoBuf = JsonClassConvert.getdailyno2Class(StrBuf);
            if (getdailynoBuf != null)
            {
                StrResult = getdailynoBuf.dailyno;
            }
            */
            return StrResult;
        }

        public static String HttpGetClassNo()
        {
            String StrResult = "";
            /*jash stop
            String StrDomain = $"http://{SysParmUI.m_pos_serial_paramBuf.serial_server_name}:{SysParmUI.m_pos_serial_paramBuf.serial_server_port}/";
            String StrBuf = HttpsFun.RESTfulAPI_get(StrDomain, "getclassno", "", "", "");
            getclassno getclassnoBuf = JsonClassConvert.getclassno2Class(StrBuf);
            if (getclassnoBuf != null)
            {
                StrResult = getclassnoBuf.classno;
            }
            */
            return StrResult;
        }

        public static bool HttpTestConnection()
        {
            bool blnResult = false;
            /*jash stop
            String StrDomain = $"http://{SysParmUI.m_pos_serial_paramBuf.serial_server_name}:{SysParmUI.m_pos_serial_paramBuf.serial_server_port}/";
            String StrBuf = HttpsFun.RESTfulAPI_get(StrDomain, "testconnection", "", "", "");
            testconnection testconnectionBuf = JsonClassConvert.testconnection2Class(StrBuf);
            if ((testconnectionBuf != null) && (testconnectionBuf.servername.Length > 0))
            {
                blnResult = true;
            }
            */
            return blnResult;
        }

        public static void ShowSoftKeyboard()//顯示/呼叫 螢幕鍵盤/軟體鍵盤
        {
            try
            {
                //關閉螢幕鍵盤(尋找已開啟的軟體並將它關閉)
                System.Diagnostics.Process[] MyProcess = System.Diagnostics.Process.GetProcessesByName("osk");
                if (MyProcess.Length > 0)
                {
                    MyProcess[0].Kill();
                }

                //Any CPU 寫法
                //https://social.msdn.microsoft.com/Forums/vstudio/en-US/3cf45aac-fab9-45f0-b416-cc504daf71da/processstart-elevation-and-uac?forum=csharpgeneral       
                /*Process process = new Process();
                process.StartInfo.UseShellExecute = true;
                process.StartInfo.WorkingDirectory = "C:\\";
                process.StartInfo.FileName = "C:\\WINDOWS\\system32\\osk.exe";
                //process.StartInfo.Verb = "runas";
                process.Start();*/

                //透過cmd的start執行軟體鍵盤 讓cmd不咬住 並且透過exit將cmd畫面關閉 [透過cmd克服C# x32程式無法呼叫 x64系統應用程式的問題]
                Process.Start(@"cmd.exe", "/c start osk.exe exit");
            }
            catch (Exception ex)
            {
                String StrLog = String.Format("{0}:{1}", "ShowSoftKeyboard", ex.ToString());
                LogFile.Write("ProcessError ; " + StrLog);
            }

        }

        public static double m_dblScreenWidth = 0;
        public static double m_dblScreenHeight = 0;
        public static double m_dblScreenDensity = 0.0;
        public void GetDisplayInfo()
        {//抓螢幕解析度
            LogFile.Write("GetDisplayInfo Start");
            var displayInfo = DeviceDisplay.MainDisplayInfo;
            m_dblScreenWidth = displayInfo.Width;
            m_dblScreenHeight = displayInfo.Height;
            m_dblScreenDensity = displayInfo.Density;
        }

        private ObservableCollection<ShopcartItem> m_ShopcartItems
            
            
            = new ObservableCollection<ShopcartItem>();
        private String[] m_StrShopcartIcons = new string[5] { "checkbox00.png", "checkbox01.png", "blank.png", "add.png", "up_arrow.png" };//存放購物車ICON圖片名
        public MainPage()//建構子
        {
            InitializeComponent();
            LogFile.Write("MainPage Start");
            GetDisplayInfo();
            ShowInfoInit();
            ShopcartBtnGridInit();
            MiddleRowButtonInit();
            CreateCategoryBtn(8,2,4);
            CreateProductBtn(16, 4, 4);//4, 1,4
            CreateCondimentBtn(8,2,4);
            CategoryBtnSetShow(true);
            if (m_CategoryBtn[0].IsVisible)
            {
                m_CustBtnCategorySelected = m_CategoryBtn[0];
                m_intCategorySelectedSID = m_CategoryBtn[0].m_intSID;
                CategoryBtn_Clicked();
            }
            ShopcartListView.ItemsSource = m_ShopcartItems;//綁定購物車資料結構
            /*
            //---
            //移除方格整列元素 & 動態調整版面大小
            ShowInfoLine01.IsVisible = false;
            InvoiceNoTextLable.IsVisible = false;
            InvoiceNoValueLable.IsVisible = false;
            InvoiceNoBtn.IsVisible = false;
            InvoiceCountTextLable.IsVisible = false;
            InvoiceCountValueLable.IsVisible = false;
            CarrierBtn.IsVisible = false;
            TaxIDTextLable.IsVisible = false;
            TaxIDValueLable.IsVisible = false;
            CarrierTextLable.IsVisible = false;
            CarrierValueLable.IsVisible = false;
            ShowInfoGrid.RowDefinitions.RemoveAt(2);
            LeftContentGrid.RowDefinitions[0] = new RowDefinition(new GridLength(2.5, GridUnitType.Star));
            LeftContentGrid.RowDefinitions[1] = new RowDefinition(new GridLength(6.5, GridUnitType.Star));
            //---移除方格整列元素 & 動態調整版面大小
           */
        }

        private void ShowInfoInit()
        {
            //*
            OrderStatusLable.Text = "";//訂購中
            QuantityValueLable.Text = "";//商品數量
            DiscountValueLable.Text = "";//優惠金額
            ServiceValueLable.Text = "";//服務費
            ReceivableValueLable.Text = "";//應收總額
            ChangeValueLable.Text = "";//找零金額
            OrderNoValueLable.Text = "";//訂單編號
            PickupNoValueLable.Text = "";//取餐號
            VisitorsValueLable.Text = "";//來客數
            OrderTypeValueLable.Text = "";//訂單類型
            TableNoValueLable.Text = "";//桌號
            ShopNoValueLable.Text = "";//牌號
            MemberNameValueLable.Text = "";//會員名稱
            MemberTelValueLable.Text = "";//會員電話
            InvoiceNoValueLable.Text = "";//發票號碼
            InvoiceCountValueLable.Text = "";//發票剩餘張數
            TaxIDValueLable.Text = "";//客戶統編
            CarrierValueLable.Text = "";//發票載具
            //*/

            Color BackgroundColor = new Color(25, 74, 110);
            double dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));
            CarrierBtn.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, "發票\n載具", dblFontSize);
            InvoiceNoBtn.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, "客戶\n統編", dblFontSize);
        }

        private void ShopcartBtnGridInit()
        {
            double dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));
            ShopcartBtn00.m_intSID = 0;
            ShopcartBtn01.m_intSID = 1;
            ShopcartBtn02.m_intSID = 2;
            ShopcartBtn03.m_intSID = 3;
            ShopcartBtn04.m_intSID = 4;
            ShopcartBtn05.m_intSID = 5;
            ShopcartBtn06.m_intSID = 6;
            ShopcartBtn07.m_intSID = 7;
            ShopcartBtn08.m_intSID = 8;
            //ShopcartBtn09.m_intSID = 9;
            //ShopcartBtn10.m_intSID= 10;

            Color BackgroundColor = new Color(25, 74, 110);
            String []StrName= new String[11];
            for(int i=0; i<11; i++)
            {
                StrName[i]= i.ToString();
            }
            ShopcartBtn00.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[0], dblFontSize);
            ShopcartBtn01.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[1], dblFontSize);
            ShopcartBtn02.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[2], dblFontSize);
            ShopcartBtn03.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[3], dblFontSize);
            ShopcartBtn04.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[4], dblFontSize);
            ShopcartBtn05.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[5], dblFontSize);
            ShopcartBtn06.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[6], dblFontSize);
            ShopcartBtn07.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[7], dblFontSize);
            ShopcartBtn08.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, StrName[8], dblFontSize);
            //ShopcartBtn09.InitDisplay(Colors.White, BackgroundColor, StrName[9], dblFontSize);
            //ShopcartBtn10.InitDisplay(Colors.White, BackgroundColor, StrName[10], dblFontSize);
            
            // 綁定事件
            var tapGestureRecognizer = new TapGestureRecognizer();
            tapGestureRecognizer.Tapped += ShopcartBtn_Clicked;
            ShopcartBtn00.GestureRecognizers.Add(tapGestureRecognizer);
            ShopcartBtn01.GestureRecognizers.Add(tapGestureRecognizer);
            ShopcartBtn02.GestureRecognizers.Add(tapGestureRecognizer);
            ShopcartBtn03.GestureRecognizers.Add(tapGestureRecognizer);
            ShopcartBtn04.GestureRecognizers.Add(tapGestureRecognizer);
            ShopcartBtn05.GestureRecognizers.Add(tapGestureRecognizer);
            ShopcartBtn06.GestureRecognizers.Add(tapGestureRecognizer);
            ShopcartBtn07.GestureRecognizers.Add(tapGestureRecognizer);
            ShopcartBtn08.GestureRecognizers.Add(tapGestureRecognizer);
            //ShopcartBtn09.GestureRecognizers.Add(tapGestureRecognizer);
            //ShopcartBtn10.GestureRecognizers.Add(tapGestureRecognizer);

            ModifiedBtn.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, "修改", dblFontSize);
            PlusBtn.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, "┼", dblFontSize);
            MinusBtn.InitDisplay(Colors.White, BackgroundColor, BackgroundColor, "─", dblFontSize);
        }
        private async void ShopcartBtn_Clicked(object sender, EventArgs e)
        {
            await this.ShowPopupAsync(new MessageBox($"{((CustBtn)(sender)).m_intSID}"));
            switch(((CustBtn)(sender)).m_intSID)
            {
                case 0:
                    break;
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4://結帳按鈕
                    break;
                case 5:
                    break;
                case 6:
                    break;
                case 7:
                    break;
                case 8:
                    break;
                case 9:
                    break;
                case 10:
                    break;
            }
        }
        //---
        //畫面右側按鈕動態建立函數
        CustBtn[] m_CategoryBtn;
        private void CreateCategoryBtn(int intQuantity, int intRows, int intColumns)
        {
            double dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));

            var tapGestureRecognizer00 = new TapGestureRecognizer();
            tapGestureRecognizer00.Tapped += CategoryUpDown_Clicked;
            CategoryUpBtn.m_intSID = 0;
            CategoryDownBtn.m_intSID = 1;
            CategoryUpBtn.InitDisplay(Colors.White, new Color(25, 74, 110), new Color(25, 74, 110), "▲", dblFontSize);
            CategoryDownBtn.InitDisplay(Colors.White, new Color(25, 74, 110), new Color(25, 74, 110), "▼", dblFontSize);
            CategoryUpBtn.GestureRecognizers.Add(tapGestureRecognizer00);
            CategoryDownBtn.GestureRecognizers.Add(tapGestureRecognizer00);

            if (intRows*intColumns>= intQuantity)
            {
                Grid CategoryMainGrid = new Grid();//建立網格
                CategoryMainGrid.Margin = new Thickness(2,1,2,1);
                CategoryMainGrid.RowSpacing = 1;
                CategoryMainGrid.ColumnSpacing = 1;
                for (int i = 0;i<intRows;i++) //配置列數
                {
                    CategoryMainGrid.RowDefinitions.Add(new RowDefinition());
                }
                for (int i = 0; i < intColumns; i++)//配置行數
                {
                    CategoryMainGrid.ColumnDefinitions.Add(new ColumnDefinition());
                }
                
                m_CategoryBtn=new CustBtn[intQuantity];//建立按鈕陣列
                for(int i=0;i<intQuantity;i++)
                {
                    //建立按鈕
                    m_CategoryBtn[i] = new CustBtn();//建立每個按鈕實體
                    m_CategoryBtn[i].InitData(i);
                    dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));
                    m_CategoryBtn[i].InitDisplay(new Color(65, 134, 168), new Color(36, 112, 160), new Color(253, 95, 0), $"產品類名稱超長測試{i + 1}", dblFontSize);//每個按鈕初始化

                    // 綁定事件
                    var tapGestureRecognizer = new TapGestureRecognizer();
                    tapGestureRecognizer.Tapped += CategoryBtn_Clicked;
                    m_CategoryBtn[i].GestureRecognizers.Add(tapGestureRecognizer);
                    
                    //放到Layout上
                    int intRow = i / intColumns;
                    int intColumn = i % intColumns;
                    CategoryMainGrid.Add(m_CategoryBtn[i], intColumn, intRow);
                }
                //放到XAML的Layout上
                CategoryBtnGrid.Add(CategoryMainGrid, 0, 0);
            }
        }
        private void CategoryBtnInitHide()
        {
            CategoryTextLable.Text = "";
            for (int i = 0; i < m_CategoryBtn.Length; i++)
            {
                m_CategoryBtn[i].IsVisible = false;
            }
        }

        //---
        //DB取得產品分類
        public int m_intCategoryNowPages = 1;
        public int m_intCategoryTotalPages = 1;
        private void CategoryBtnInformationGet()
        {
            m_intCategoryNowPages = 1;
            m_intCategoryTotalPages = 1;
            SqliteDataAccess.product_category2ListVar();
            if (SqliteDataAccess.m_product_category != null)
            {
                m_intCategoryTotalPages = SqliteDataAccess.m_product_category.Count / m_CategoryBtn.Length;
                if ((SqliteDataAccess.m_product_category.Count % m_CategoryBtn.Length) > 0)
                {
                    m_intCategoryTotalPages++;
                }
                else
                {
                    m_intCategoryTotalPages += 0;
                }

                if (m_intCategoryTotalPages == 0)
                {
                    m_intCategoryNowPages = 0;
                    m_intCategoryTotalPages = 0;
                }
            }
            else
            {
                m_intCategoryNowPages = 0;
                m_intCategoryTotalPages = 0;
            }
        }
        //---DB取得產品分類

        void CategoryBtnSetShow(bool blnSQL = false)
        {
            CategoryBtnInitHide();
            if (blnSQL == true)
            {
                CategoryBtnInformationGet();
            }

            int j = 0;
            if ((SqliteDataAccess.m_product_category != null) && (m_intCategoryNowPages > 0))
            {
                for (int i = ((m_intCategoryNowPages - 1) * m_CategoryBtn.Length); i < SqliteDataAccess.m_product_category.Count; i++)
                {
                    double dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));
                    m_CategoryBtn[j].SetText(SqliteDataAccess.m_product_category[i].category_name);
                    m_CategoryBtn[j].m_intSID = SqliteDataAccess.m_product_category[i].SID;
                    m_CategoryBtn[j].m_intPrice = 0;
                    m_CategoryBtn[j].m_StrProductCode = SqliteDataAccess.m_product_category[i].category_code;
                    m_CategoryBtn[j].IsVisible = true;
                    j++;
                    if (j == m_CategoryBtn.Length)
                    {
                        break;
                    }
                }
            }
            CategoryTextLable.Text = String.Format("{2}/{3}", "類別", "第", m_intCategoryNowPages, m_intCategoryTotalPages, "頁");
        }

        public CustBtn m_CustBtnCategorySelected = null;
        public int m_intCategorySelectedSID = -1;

        private void SetCategoryBtnBackgroundColor()
        {
            for (int i = 0; i < m_CategoryBtn.Length; i++)
            {
                if ((m_CustBtnCategorySelected == null) || (m_intCategorySelectedSID != m_CategoryBtn[i].m_intSID))
                {
                    m_CategoryBtn[i].SetBackgroundColor();
                }
                else
                {
                    m_CategoryBtn[i].SetBackgroundColor(true);
                }
            }
        }

        private async void CategoryBtn_Clicked()
        {
            SetCategoryBtnBackgroundColor();

            if ((m_CustBtnCategorySelected != null) && (m_intCategorySelectedSID>0))
            {
                ProductBtnInitShow(true);
                CondimentBtnInitHide();
            }
            //await this.ShowPopupAsync(new MessageBox($"{m_CustBtnCategorySelected.m_intSID}"));
        }
        private void CategoryBtn_Clicked(object sender, EventArgs e)
        {
            m_CustBtnCategorySelected = ((CustBtn)(sender));
            m_intCategorySelectedSID = m_CustBtnCategorySelected.m_intSID;
            CategoryBtn_Clicked();
        }

        private async void CategoryUpDown_Clicked(object sender, EventArgs e)
        {
            int intCategoryNowPages = m_intCategoryNowPages;

            switch (((CustBtn)(sender)).m_intSID)
            {
                case 0://產品分類切頁事件 [-1]
                    m_intCategoryNowPages = (m_intCategoryNowPages - 1) > 0 ? (m_intCategoryNowPages - 1) : 1;            
                    break;
                case 1://產品分類切頁事件 [+1]
                    m_intCategoryNowPages = (m_intCategoryNowPages + 1) < m_intCategoryTotalPages ? (m_intCategoryNowPages + 1) : m_intCategoryTotalPages;
                    break;
            }

            if(intCategoryNowPages!= m_intCategoryNowPages)
            {
                CategoryBtnSetShow();
                SetCategoryBtnBackgroundColor();
            }

        }

        CustBtn[] m_ProductBtn;
        private void CreateProductBtn(int intQuantity, int intRows, int intColumns)
        {
            double dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));

            var tapGestureRecognizer00 = new TapGestureRecognizer();
            tapGestureRecognizer00.Tapped += ProductUpDown_Clicked;
            ProductUpBtn.m_intSID = 0;
            ProductDownBtn.m_intSID = 1;
            ProductUpBtn.InitDisplay(Colors.White, new Color(25, 74, 110), new Color(25, 74, 110), "▲", dblFontSize);
            ProductDownBtn.InitDisplay(Colors.White, new Color(25, 74, 110), new Color(25, 74, 110), "▼", dblFontSize);
            ProductUpBtn.GestureRecognizers.Add(tapGestureRecognizer00);
            ProductDownBtn.GestureRecognizers.Add(tapGestureRecognizer00);

            if (intRows * intColumns >= intQuantity)
            {
                Grid ProductMainGrid = new Grid();
                ProductMainGrid.Margin = new Thickness(2, 2, 1, 1);
                ProductMainGrid.RowSpacing = 1;
                ProductMainGrid.ColumnSpacing = 1;
                for (int i = 0; i < intRows; i++)
                {
                    ProductMainGrid.RowDefinitions.Add(new RowDefinition());
                }
                for (int i = 0; i < intColumns; i++)
                {
                    ProductMainGrid.ColumnDefinitions.Add(new ColumnDefinition());
                }

                m_ProductBtn = new CustBtn[intQuantity];//建立按鈕陣列
                for (int i = 0; i < intQuantity; i++)
                {
                    //建立按鈕
                    m_ProductBtn[i] = new CustBtn();//建立每個按鈕實體
                    m_ProductBtn[i].InitData(i);
                    dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));
                    m_ProductBtn[i].InitDisplay(Colors.White, new Color(106, 117, 79), new Color(106, 117, 79), $"產品名稱{i + 1}", dblFontSize);//每個按鈕初始化

                    // 綁定事件
                    var tapGestureRecognizer = new TapGestureRecognizer();
                    tapGestureRecognizer.Tapped += Product_Clicked;
                    m_ProductBtn[i].GestureRecognizers.Add(tapGestureRecognizer);

                    //放到Layout上
                    int intRow = i / intColumns;
                    int intColumn = i % intColumns;
                    ProductMainGrid.Add(m_ProductBtn[i], intColumn, intRow);
                }

                //放到XAML的Layout上
                ProductBtnGrid.Add(ProductMainGrid, 0, 0);
            }
        }

        public CustBtn m_CustBtnProductSelected = null;
        public int m_intProductSelectedSID = -1;
        private async void Product_Clicked(object sender, EventArgs e)
        {
            if (AfterPaymentUIInit() != 0)
            {
                return;
            }

            //---
            //整合建立訂單編號字串功能
            if (await PosOrderNumberCreatUIInitAsync() != 0)
            {
                return;//跳出程序
            }
            //---整合建立訂單編號字串功能

            //jash stop OrderStatusLable.Text = "訂購中";
            m_CustBtnProductSelected = (CustBtn)sender;//productButtonClickShow(sender);
            m_intProductSelectedSID = m_CustBtnProductSelected.m_intSID;
            int intMainSID = -1;

            //---
            //購物車清單新增程序
            if (m_CustBtnProductSelected.m_Strproduct_type == "T")//套餐
            {
                intMainSID = m_CustBtnProductSelected.m_intSID;
                String StrCode = m_CustBtnProductSelected.m_StrProductCode;
                String StrName = m_CustBtnProductSelected.GetText();
                double dblPrice = (double)m_CustBtnProductSelected.m_intPrice;

                await Navigation.PushModalAsync(new FoodMeal());
                /*jash stop
                FoodMeal foodMeal = new FoodMeal(intMainSID, StrCode, StrName, dblPrice);//套餐編輯UI
                foodMeal.ShowDialog();
                */

                intMainSID = -1;//預防刷新調味品區塊

                /*jash stop
                if (foodMeal.m_blnRun == true)
                {
                    ShopCartFoodMealAdd();
                }
                */
            }
            else if ((m_CustBtnProductSelected != null) && (m_CustBtnProductSelected.m_blnspec != true))//一般商品
            {
                intMainSID = m_CustBtnProductSelected.m_intSID;//正確記錄產選擇商品SID,利於後續顯示對應配料 at 20221102
                ShopCartMainListAdd();
                ShopcartListViewShow(0, (m_ShopCart.m_ShopMainList.Count - 1), -1, 14);//dgvmain001Show
            }
            else//產品規格群組
            {
                ProductSpecification ProductSpecificationBuf = new ProductSpecification(m_CustBtnProductSelected.GetText(), m_CustBtnProductSelected.m_product);
                await this.ShowPopupAsync(ProductSpecificationBuf);
                if((ProductSpecification.m_blnResult) && (ProductSpecification.m_BtnResult!=null))
                {
                    m_CustBtnProductSelected = ProductSpecification.m_BtnResult;
                    intMainSID = ProductSpecification.m_BtnResult.m_intSID;
                    ShopCartMainListAdd();
                    ShopcartListViewShow(0, (m_ShopCart.m_ShopMainList.Count - 1), -1, 14);//dgvmain001Show
                }
            }
            //---購物車清單新增程序

            if (intMainSID != -1)
            {
                CondimentBtnInitShow(true, intMainSID);//顯示調味品清單程序
            }

            //ChangeOrderTypeCalculate();
        }

        private async void ProductUpDown_Clicked(object sender, EventArgs e)
        {
            int intProductNowPages = m_intProductNowPages;

            switch (((CustBtn)(sender)).m_intSID)
            {
                case 0://產品切頁事件 [-1]
                    m_intProductNowPages = (m_intProductNowPages - 1) > 0 ? (m_intProductNowPages - 1) : 1;
                    break;
                case 1://產品切頁事件 [+1]
                    m_intProductNowPages = (m_intProductNowPages + 1) < m_intProductTotalPages ? (m_intProductNowPages + 1) : m_intProductTotalPages;
                    break;
            }

            if (intProductNowPages != m_intProductNowPages)
            {
                ProductBtnInitShow();
            }
        }

        public int m_intProductNowPages = 1;
        public int m_intProductTotalPages = 1;
        private void ProductBtnInformationGet()
        {
            m_intProductNowPages = 1;
            m_intProductTotalPages = 1;
            if (m_intCategorySelectedSID>0)
            {
                //SqliteDataAccess.product2ListVar(m_RoundButtonExpcategorySelected.m_intSID);
                List<int> spec_sidbuf = new List<int>();
                SQLDataTableModel.m_product_spec_Var.Clear();

                string expression01;
                expression01 = String.Format("category_sid={0} AND product_display='Y'", m_intCategorySelectedSID);
                DataRow[] foundRows01 = SQLDataTableModel.m_productDataTable.Select(expression01);
                if (foundRows01.Length > 0)
                {
                    for (int i = 0; i < foundRows01.Length; i++)
                    {
                        int spec_sid = Int32.Parse(foundRows01[i]["spec_sid"].ToString());
                        if (spec_sid == 0)//單純產品
                        {
                            product_spec_Var product_Spec_VarBuf = new product_spec_Var();
                            product_Spec_VarBuf.product_price = Convert.ToDouble(foundRows01[i]["product_price"].ToString());
                            product_Spec_VarBuf.product_sid = Int32.Parse(foundRows01[i]["product_sid"].ToString());
                            product_Spec_VarBuf.product_code = foundRows01[i]["product_code"].ToString();
                            product_Spec_VarBuf.product_name = foundRows01[i]["product_name"].ToString();
                            product_Spec_VarBuf.blnspec = false;

                            product_Spec_VarBuf.m_Strproduct_type = foundRows01[i]["product_type"].ToString();
                            if (foundRows01[i]["tax_sid"].ToString().Length > 0)
                                product_Spec_VarBuf.m_inttax_sid = Int32.Parse(foundRows01[i]["tax_sid"].ToString()); //稅率編號 ; 產品若沒有稅率資料[m_tax_sid=0],就直接從company和tax_data取出預設值
                            if (foundRows01[i]["tax_rate"].ToString().Length > 0)
                                product_Spec_VarBuf.m_inttax_rate = Int32.Parse(foundRows01[i]["tax_rate"].ToString()); //稅率
                            product_Spec_VarBuf.m_Strtax_type = foundRows01[i]["tax_type"].ToString();//稅率類型
                            //product_Spec_VarBuf.m_inttax_fee; //稅率金額	

                            SQLDataTableModel.m_product_spec_Var.Add(product_Spec_VarBuf);
                        }
                        else
                        {
                            bool blnfind = false;
                            for (int k = 0; k < spec_sidbuf.Count; k++)
                            {
                                int intbuf = spec_sidbuf[k];
                                if (intbuf == spec_sid)
                                {
                                    blnfind = true;
                                    break;
                                }
                            }
                            if (blnfind)
                            {
                                continue;
                            }
                            else
                            {
                                spec_sidbuf.Add(spec_sid);

                                string expression02;
                                expression02 = String.Format("category_sid={0} AND spec_sid={1}", m_intCategorySelectedSID, spec_sid);
                                DataRow[] foundRows02 = SQLDataTableModel.m_productDataTable.Select(expression02);
                                product_spec_Var product_Spec_VarBuf = new product_spec_Var();
                                product_Spec_VarBuf.product_sid = -1;
                                product_Spec_VarBuf.product_code = "";
                                product_Spec_VarBuf.product_price = 0;
                                product_Spec_VarBuf.blnspec = true;
                                for (int j = 0; j < foundRows02.Length; j++)
                                {
                                    if (foundRows02[j]["spec_name"].ToString().Length > 0)
                                    {
                                        product_Spec_VarBuf.product_name = foundRows02[j]["spec_name"].ToString();
                                    }
                                    product_Var product_VarBuf = new product_Var();
                                    product_VarBuf.product_price = Convert.ToDouble(foundRows02[j]["product_price"].ToString());
                                    product_VarBuf.product_sid = Int32.Parse(foundRows02[j]["product_sid"].ToString());
                                    product_VarBuf.product_code = foundRows02[j]["product_code"].ToString();
                                    product_VarBuf.product_name = foundRows02[j]["product_name"].ToString();
                                    product_VarBuf.alias_name = foundRows02[j]["alias_name"].ToString();

                                    product_VarBuf.m_Strproduct_type = foundRows02[j]["product_type"].ToString();
                                    if (foundRows02[j]["tax_sid"].ToString().Length > 0)
                                        product_VarBuf.m_inttax_sid = Int32.Parse(foundRows02[j]["tax_sid"].ToString()); //稅率編號 ; 產品若沒有稅率資料[m_tax_sid=0],就直接從company和tax_data取出預設值
                                    if (foundRows02[j]["tax_rate"].ToString().Length > 0)
                                        product_VarBuf.m_inttax_rate = Int32.Parse(foundRows02[j]["tax_rate"].ToString()); //稅率
                                    product_VarBuf.m_Strtax_type = foundRows02[j]["tax_type"].ToString();//稅率類型
                                                                                                         //product_VarBuf.m_inttax_fee; //稅率金額	

                                    product_Spec_VarBuf.product.Add(product_VarBuf);
                                }

                                if (product_Spec_VarBuf.product_name.Length == 0)
                                {
                                    product_Spec_VarBuf.product_name = product_Spec_VarBuf.product[0].product_name;
                                }
                                SQLDataTableModel.m_product_spec_Var.Add(product_Spec_VarBuf);
                            }
                        }
                    }
                }
            }
            if (SQLDataTableModel.m_product_spec_Var != null)//if (SqliteDataAccess.m_product_data != null)
            {
                m_intProductTotalPages = SQLDataTableModel.m_product_spec_Var.Count / m_ProductBtn.Length;//intproductTotalPages = SqliteDataAccess.m_product_data.Count / 16;
                if ((SQLDataTableModel.m_product_spec_Var.Count % m_ProductBtn.Length) > 0)//if ((SqliteDataAccess.m_product_data.Count % 16) > 0)
                {
                    m_intProductTotalPages++;
                }
                else
                {
                    m_intProductTotalPages += 0;
                }

                if (m_intProductTotalPages == 0)
                {
                    m_intProductNowPages = 0;
                    m_intProductTotalPages = 0;
                }
            }
            else
            {
                m_intProductNowPages = 0;
                m_intProductTotalPages = 0;
            }
        }

        void ProductBtnInitHide()
        {
            for (int i = 0; i < m_ProductBtn.Length; i++)
            {
                m_ProductBtn[i].IsVisible = false;
            }
        }
        void ProductBtnInitShow(bool blnSQL = false)
        {
            ProductBtnInitHide();

            if (blnSQL == true)
            {
                ProductBtnInformationGet();
            }
            int j = 0;
            if ((SQLDataTableModel.m_product_spec_Var != null) && (m_intProductNowPages > 0))//if (SqliteDataAccess.m_product_data != null)
            {
                for (int i = ((m_intProductNowPages - 1) * m_ProductBtn.Length); i < SQLDataTableModel.m_product_spec_Var.Count; i++)//for (int i = ((intproductNowPages - 1) * 16); i < SqliteDataAccess.m_product_data.Count; i++)
                {
                    m_ProductBtn[j].SetText(SQLDataTableModel.m_product_spec_Var[i].product_name);//m_Buttproduct[j].Text = SqliteDataAccess.m_product_data[i].product_name;
                    m_ProductBtn[j].m_intSID = SQLDataTableModel.m_product_spec_Var[i].product_sid;//m_Buttproduct[j].m_intSID = SqliteDataAccess.m_product_data[i].SID;
                    m_ProductBtn[j].m_intPrice = Convert.ToDecimal(SQLDataTableModel.m_product_spec_Var[i].product_price);//m_Buttproduct[j].m_intPrice = SqliteDataAccess.m_product_data[i].product_price;
                    m_ProductBtn[j].m_StrProductCode = SQLDataTableModel.m_product_spec_Var[i].product_code;//m_Buttproduct[j].m_StrProductCode = SqliteDataAccess.m_product_data[i].product_code;
                    m_ProductBtn[j].m_blnspec = SQLDataTableModel.m_product_spec_Var[i].blnspec;
                    m_ProductBtn[j].m_product = SQLDataTableModel.m_product_spec_Var[i].product;

                    m_ProductBtn[j].m_Strproduct_type = SQLDataTableModel.m_product_spec_Var[i].m_Strproduct_type;//類型

                    m_ProductBtn[j].m_inttax_sid = SQLDataTableModel.m_product_spec_Var[i].m_inttax_sid; //稅率編號
                    m_ProductBtn[j].m_inttax_rate = SQLDataTableModel.m_product_spec_Var[i].m_inttax_rate; //稅率
                    m_ProductBtn[j].m_Strtax_type = SQLDataTableModel.m_product_spec_Var[i].m_Strtax_type;//稅率類型
                    //m_Buttproduct[j].m_inttax_fee = 0; //稅率金額

                    m_ProductBtn[j].IsVisible = true;
                    j++;
                    if (j == m_ProductBtn.Length)
                    {
                        break;
                    }
                }
            }
            ProductTextLable.Text = String.Format("{2}/{3}", "產品", "第", m_intProductNowPages, m_intProductTotalPages, "頁");
        }

        CustBtn[] m_CondimentBtn;
        private void CreateCondimentBtn(int intQuantity, int intRows, int intColumns)
        {
            double dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));

            var tapGestureRecognizer00 = new TapGestureRecognizer();
            tapGestureRecognizer00.Tapped += CondimentUpDown_Clicked;
            CondimentUpBtn.m_intSID = 0;
            CondimentDownBtn.m_intSID = 1;
            CondimentUpBtn.InitDisplay(Colors.White, new Color(25, 74, 110), new Color(25, 74, 110), "▲", dblFontSize);
            CondimentDownBtn.InitDisplay(Colors.White, new Color(25, 74, 110), new Color(25, 74, 110), "▼", dblFontSize);
            CondimentUpBtn.GestureRecognizers.Add(tapGestureRecognizer00);
            CondimentDownBtn.GestureRecognizers.Add(tapGestureRecognizer00);

            if (intRows * intColumns >= intQuantity)
            {
                Grid CondimentMainGrid = new Grid();
                CondimentMainGrid.Margin = new Thickness(2, 2, 1, 1);
                CondimentMainGrid.RowSpacing = 0;
                CondimentMainGrid.ColumnSpacing = 1;
                for (int i = 0; i < intRows; i++)
                {
                    CondimentMainGrid.RowDefinitions.Add(new RowDefinition());
                }
                for (int i = 0; i < intColumns; i++)
                {
                    CondimentMainGrid.ColumnDefinitions.Add(new ColumnDefinition());
                }

                m_CondimentBtn = new CustBtn[intQuantity];//建立按鈕陣列
                for (int i = 0; i < intQuantity; i++)
                {
                    //建立按鈕
                    m_CondimentBtn[i] = new CustBtn();//建立每個按鈕實體
                    m_CondimentBtn[i].InitData(i);
                    dblFontSize = Device.GetNamedSize(NamedSize.Default, typeof(Label));
                    m_CondimentBtn[i].InitDisplay(Colors.White, new Color(92, 171, 125), new Color(92, 171, 125), $"配料名稱{i + 1}", dblFontSize);//每個按鈕初始化

                    // 綁定事件
                    var tapGestureRecognizer = new TapGestureRecognizer();
                    tapGestureRecognizer.Tapped += Condiment_Clicked;
                    m_CondimentBtn[i].GestureRecognizers.Add(tapGestureRecognizer);

                    //放到Layout上
                    int intRow = i / intColumns;
                    int intColumn = i % intColumns;
                    CondimentMainGrid.Add(m_CondimentBtn[i], intColumn, intRow);
                }

                //放到XAML的Layout上
                CondimentBtnGrid.Add(CondimentMainGrid, 0, 0);
            }
        }
        void CondimentBtnInitHide()
        {
            CondimentTextLable.Text = "1/1";
            for (int i = 0; i < m_CondimentBtn.Length; i++)
            {
                m_CondimentBtn[i].SetText("");
                m_CondimentBtn[i].m_intSID = 0;
                m_CondimentBtn[i].m_intPrice = 0;
                m_CondimentBtn[i].m_StrProductCode = "";
                m_CondimentBtn[i].IsVisible = false;
            }
        }

        public int m_intCondimentNowPages = 1;
        public int m_intCondimentTotalPages = 1;
        void CondimentBtnInformationGet(int intMainSID = -1)
        {
            m_intCondimentNowPages = 1;
            m_intCondimentTotalPages = 1;
            int intproduct_sid = -1;
            SQLDataTableModel.m_condiment_Var.Clear();

            if (m_CustBtnProductSelected != null)
            {
                intproduct_sid = m_CustBtnProductSelected.m_intSID;//SqliteDataAccess.condiment2ListVar(m_RoundButtonExpproductSelected.m_intSID);
            }
            else
            {
                intproduct_sid = intMainSID;//SqliteDataAccess.condiment2ListVar(intMainSID);
            }
            if (intproduct_sid != -1)
            {
                if (SQLDataTableModel.m_condimentDataTable != null)
                {
                    string expression01;
                    expression01 = String.Format("product_sid={0}", intproduct_sid);
                    DataRow[] foundRows01 = SQLDataTableModel.m_condimentDataTable.Select(expression01);
                    if (foundRows01.Length > 0)
                    {
                        for (int i = 0; i < foundRows01.Length; i++)
                        {
                            condiment_Var condiment_VarBuf = new condiment_Var();
                            condiment_VarBuf.condiment_sid = Int32.Parse(foundRows01[i]["condiment_sid"].ToString());
                            condiment_VarBuf.condiment_code = foundRows01[i]["condiment_code"].ToString();
                            condiment_VarBuf.condiment_name = foundRows01[i]["condiment_name"].ToString();
                            condiment_VarBuf.condiment_price = Convert.ToDouble(foundRows01[i]["condiment_price"].ToString());
                            condiment_VarBuf.group_sid = Int32.Parse(foundRows01[i]["group_sid"].ToString());
                            condiment_VarBuf.min_count = Int32.Parse(foundRows01[i]["min_count"].ToString());
                            condiment_VarBuf.max_count = Int32.Parse(foundRows01[i]["max_count"].ToString());

                            condiment_VarBuf.m_Strcondiment_type = "C";//類型

                            condiment_VarBuf.m_inttax_sid = 0; //稅率編號 ; 產品若沒有稅率資料[m_tax_sid=0],就直接從company和tax_data取出預設值
                            condiment_VarBuf.m_inttax_rate = 0; //稅率
                            condiment_VarBuf.m_Strtax_type = "";//稅率類型
                            //m_inttax_fee; //稅率金額

                            string expression02;
                            expression02 = String.Format("group_sid={0}", condiment_VarBuf.group_sid);
                            DataRow[] foundRows02 = SQLDataTableModel.m_condimentDataTable.Select(expression02);
                            List<int> ListBuf = new List<int>();
                            if (foundRows02.Length > 0)
                            {
                                ListBuf.Clear();
                                for (int j = 0; j < foundRows02.Length; j++)
                                {
                                    int intBuf = Int32.Parse(foundRows02[j]["condiment_sid"].ToString());
                                    bool blnRepeat = false;
                                    for (int k = 0; k < ListBuf.Count; k++)
                                    {
                                        if (ListBuf[k] == intBuf)
                                        {
                                            blnRepeat = true;
                                            break;
                                        }
                                    }

                                    if (!blnRepeat)
                                    {
                                        condiment_VarBuf.same_group_sid.Add(intBuf);
                                        ListBuf.Add(intBuf);
                                    }
                                    else
                                    {
                                        continue;
                                    }
                                }//for (int j = 0; j < foundRows02.Length; j++)
                            }//if (foundRows02.Length > 0)
                            SQLDataTableModel.m_condiment_Var.Add(condiment_VarBuf);
                        }//for (int i = 0; i < foundRows01.Length; i++)
                    }//if (foundRows01.Length > 0)
                }//if(SQLDataTableModel.m_condimentDataTable != null)
            }//if(intproduct_sid != -1)

            if (SQLDataTableModel.m_condiment_Var != null)//if (SqliteDataAccess.m_condiment_data != null)
            {
                m_intCondimentTotalPages = SQLDataTableModel.m_condiment_Var.Count / m_CondimentBtn.Length;//intcondimentTotalPages = SqliteDataAccess.m_condiment_data.Count / 15;
                if ((SQLDataTableModel.m_condiment_Var.Count % m_CondimentBtn.Length) > 0)//if ((SqliteDataAccess.m_condiment_data.Count % 15) > 0)
                {
                    m_intCondimentTotalPages++;
                }
                else
                {
                    m_intCondimentTotalPages += 0;
                }

                if (m_intCondimentTotalPages == 0)
                {
                    m_intCondimentNowPages = 0;
                    m_intCondimentTotalPages = 0;
                }
            }
            else
            {
                m_intCondimentNowPages = 0;
                m_intCondimentTotalPages = 0;
            }
        }

        void CondimentBtnInitShow(bool blnSQL = false, int intMainSID = -1)
        {
            //---
            //實作相同類型配料按鈕顏色一致
            Color[] ColorBuf = new Color[4];
            ColorBuf[0] = new Color(92, 171, 125);//G
            ColorBuf[1] = new Color(28, 74, 110);//B
            ColorBuf[2] = Colors.Firebrick;//R
            ColorBuf[3] = new Color(253, 95, 0);//O
            int intLastsame_group_sid = -1;
            int intColorsIndex = -1;
            //---實作相同類型配料按鈕顏色一致

            CondimentBtnInitHide();
            if (blnSQL == true)
            {
                CondimentBtnInformationGet(intMainSID);
            }
            int j = 0;
            if ((SQLDataTableModel.m_condiment_Var != null) && (m_intCondimentNowPages > 0))//if (SqliteDataAccess.m_condiment_data != null)
            {
                for (int i = ((m_intCondimentNowPages - 1) * m_CondimentBtn.Length); i < SQLDataTableModel.m_condiment_Var.Count; i++)//for (int i = ((intcondimentNowPages - 1) * 15); i < SqliteDataAccess.m_condiment_data.Count; i++)
                {
                    m_CondimentBtn[j].SetText(SQLDataTableModel.m_condiment_Var[i].condiment_name);//SqliteDataAccess.m_condiment_data[i].condiment_name;
                    m_CondimentBtn[j].m_intSID = SQLDataTableModel.m_condiment_Var[i].condiment_sid;//SqliteDataAccess.m_condiment_data[i].SID;
                    m_CondimentBtn[j].m_intPrice = (int)SQLDataTableModel.m_condiment_Var[i].condiment_price;//SqliteDataAccess.m_condiment_data[i].condiment_price;
                    m_CondimentBtn[j].m_StrProductCode = SQLDataTableModel.m_condiment_Var[i].condiment_code;//SqliteDataAccess.m_condiment_data[i].condiment_code;
                    m_CondimentBtn[j].m_same_group_sid = SQLDataTableModel.m_condiment_Var[i].same_group_sid;
                    m_CondimentBtn[j].m_min_count = SQLDataTableModel.m_condiment_Var[i].min_count;
                    m_CondimentBtn[j].m_max_count = SQLDataTableModel.m_condiment_Var[i].max_count;
                    m_CondimentBtn[j].IsVisible = true;

                    //---
                    //實作相同類型配料按鈕顏色一致
                    if (intLastsame_group_sid != SQLDataTableModel.m_condiment_Var[i].group_sid)
                    {
                        intLastsame_group_sid = SQLDataTableModel.m_condiment_Var[i].group_sid;
                        intColorsIndex++;
                    }
                    m_CondimentBtn[j].SetBackgroundColor(ColorBuf[intColorsIndex]);

                    //---實作相同類型配料按鈕顏色一致

                    m_CondimentBtn[j].m_Strproduct_type = "C";//類型

                    m_CondimentBtn[j].m_inttax_sid = 0; //稅率編號 ; 產品若沒有稅率資料[m_tax_sid=0],就直接從company和tax_data取出預設值
                    m_CondimentBtn[j].m_inttax_rate = 0; //稅率
                    m_CondimentBtn[j].m_Strtax_type = "";//稅率類型

                    j++;
                    if (j == m_CondimentBtn.Length)
                    {
                        break;
                    }
                }
            }
            CondimentTextLable.Text = String.Format("{2}/{3}", "配料", "第", m_intCondimentNowPages, m_intCondimentTotalPages, "頁");
        }

        public CustBtn m_CustBtnCondimentSelected = null;
        private async void Condiment_Clicked(object sender, EventArgs e)
        {
            if (m_intOrderState != 0)//調味品按鈕訂單狀態偵測防呆
            {
                return;
            }

            m_CustBtnCondimentSelected = (CustBtn)sender;
            ShopCartSubListAdd();
        }

        private void CondimentUpDown_Clicked(object sender, EventArgs e)
        {
            int intCondimentNowPages = m_intCondimentNowPages;

            switch (((CustBtn)(sender)).m_intSID)
            {
                case 0://配料切頁事件 [-1]
                    m_intCondimentNowPages = (m_intCondimentNowPages - 1) > 0 ? (m_intCondimentNowPages - 1) : 1;
                    break;
                case 1://配料切頁事件 [+1]
                    m_intCondimentNowPages = (m_intCondimentNowPages + 1) < m_intCondimentTotalPages ? (m_intCondimentNowPages + 1) : m_intCondimentTotalPages;
                    break;
            }

            if (intCondimentNowPages != m_intCondimentNowPages)
            {
                CondimentBtnInitShow();
            }
        }
        //---畫面右側按鈕動態建立函數

        private int m_intDelItemType = -1;//0[產品],1[折扣讓],2[小計],4[調味品單一],5[套餐],6[套餐折扣讓]
        private ShopcartItem m_ShopcartItemSelected = null;
        private int m_intShopcartSelectedIndex = -1;
        private void ShopcartListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            int intLastSelectedIndex = -1;
            if (e.SelectedItem == null)
            {
                m_ShopcartItemSelected = null;
                m_intShopcartSelectedIndex = -1;
                return;
            }

            if (m_intOrderState != 0)//購物車清單項目訂單狀態偵測防呆
            {
                return;
            }

            intLastSelectedIndex = m_intShopcartSelectedIndex;
            m_ShopcartItemSelected = (ShopcartItem)e.SelectedItem;
            m_intShopcartSelectedIndex = e.SelectedItemIndex;

            if (intLastSelectedIndex == m_intShopcartSelectedIndex)
            {
                return;
            }

            //---
            //改變選擇列顏色
            ShopcartItem ShopcartItemSelectedBuf = new ShopcartItem();
            ShopcartItemSelectedBuf.id = m_ShopcartItemSelected.id;
            ShopcartItemSelectedBuf.Image00 = m_ShopcartItemSelected.Image00;
            ShopcartItemSelectedBuf.Image01 = m_ShopcartItemSelected.Image01;
            ShopcartItemSelectedBuf.Name = m_ShopcartItemSelected.Name;
            ShopcartItemSelectedBuf.Amount = m_ShopcartItemSelected.Amount;
            ShopcartItemSelectedBuf.Price = m_ShopcartItemSelected.Price;
            ShopcartItemSelectedBuf.Sum = m_ShopcartItemSelected.Sum;
            ShopcartItemSelectedBuf.image_id = m_ShopcartItemSelected.image_id;
            ShopcartItemSelectedBuf.Font_Color = Colors.White;
            ShopcartItemSelectedBuf.Font_Size = m_ShopcartItemSelected.Font_Size;
            ShopcartItemSelectedBuf.State = m_ShopcartItemSelected.State;
            ShopcartItemSelectedBuf.BColor=Colors.Blue;
            m_ShopcartItems.Insert(m_intShopcartSelectedIndex, ShopcartItemSelectedBuf);
            m_ShopcartItems.RemoveAt((m_intShopcartSelectedIndex + 1));

            if (intLastSelectedIndex>=0)
            {
                ShopcartItemSelectedBuf = new ShopcartItem();
                ShopcartItemSelectedBuf.id = m_ShopcartItems[intLastSelectedIndex].id;
                ShopcartItemSelectedBuf.Image00 = m_ShopcartItems[intLastSelectedIndex].Image00;
                ShopcartItemSelectedBuf.Image01 = m_ShopcartItems[intLastSelectedIndex].Image01;
                ShopcartItemSelectedBuf.Name = m_ShopcartItems[intLastSelectedIndex].Name;
                ShopcartItemSelectedBuf.Amount = m_ShopcartItems[intLastSelectedIndex].Amount;
                ShopcartItemSelectedBuf.Price = m_ShopcartItems[intLastSelectedIndex].Price;
                ShopcartItemSelectedBuf.Sum = m_ShopcartItems[intLastSelectedIndex].Sum;
                ShopcartItemSelectedBuf.image_id = m_ShopcartItems[intLastSelectedIndex].image_id;
                ShopcartItemSelectedBuf.Font_Color = Colors.Black;
                ShopcartItemSelectedBuf.Font_Size = m_ShopcartItems[intLastSelectedIndex].Font_Size;
                ShopcartItemSelectedBuf.State = m_ShopcartItems[intLastSelectedIndex].State;
                ShopcartItemSelectedBuf.BColor = Colors.White;
                //m_ShopcartItems.Insert(intLastSelectedIndex, ShopcartItemSelectedBuf);
                //m_ShopcartItems.RemoveAt((intLastSelectedIndex + 1));
                m_ShopcartItems[intLastSelectedIndex] = ShopcartItemSelectedBuf;
                m_ShopcartItems.Move(intLastSelectedIndex, intLastSelectedIndex);
            }
            //---改變選擇列顏色

            //判斷項目內容-產品/調味品/折扣讓/小計
            //state0
            //0[產品]
            //1[折扣讓]
            //2[小計]
            //3[調味品合併]
            //4[調味品單一]
            int intState0 = -1;
            String StrBuf = m_ShopcartItemSelected.id;
            string[] strs = StrBuf.Split(',');
            int intIndex = Int32.Parse(strs[0]);
            int intBuf = Int32.Parse(strs[1]);
            String StrTs = (strs.Length > 2) ? strs[2] : "";//判斷該列是否為套餐相關資料

            if (intIndex < 0)//訂單結帳列,直接跳離防呆機制
            {
                return;
            }

            if (intBuf >= 0)
            {
                //3[調味品合併]
                //4[調味品單一]
                if (Int32.Parse(m_ShopcartItemSelected.Amount) > 1)//使用數量判斷
                {
                    intState0 = 3;
                }
                else
                {
                    intState0 = 4;
                }
            }
            else
            {
                //0[產品]
                //1[折扣讓]
                //2[小計]
                intState0 = Math.Abs(intBuf) - 1;
            }

            m_intDelItemType = intState0; //0[產品],1[折扣讓],2[小計],4[調味品單一],5[套餐],6[套餐折扣讓]
            if (StrTs == "T")
            {
                m_intDelItemType = 5;
            }
            else if (StrTs == "TD")
            {
                m_intDelItemType = 6;
            }

            int item_no = m_ShopCart.m_ShopMainList[intIndex].m_intitem_no;
            String SQL = String.Format("SELECT discount_type,subtotal_flag FROM order_content_data WHERE order_no='{0}' AND item_no='{1}' LIMIT 0,1;", m_StrPosOrderNumber, item_no);
            DataTable order_content_dataTable = SQLDataTableModel.GetDataTable(SQL);

            //判斷有折扣/折讓
            //state1 0/1
            int intState1 = 0;//無 折扣/折讓


            //判斷有無小計
            //state2 0/1
            int intState2 = 0;//無 小計

            if (order_content_dataTable.Rows.Count > 0)
            {
                if (order_content_dataTable.Rows[0]["discount_type"].ToString() != "N")
                {
                    intState1 = 1;
                }
                if (order_content_dataTable.Rows[0]["subtotal_flag"].ToString() != "N")
                {
                    intState2 = 1;
                }
            }

            QuantityBtnEnableStateSet(intState0, intState1, intState2, StrTs);

            if ((intState0==0) && (StrTs.Length == 0))
            {
                ShopCartListChangeCondimentBtnInitShow();//購物車點選切換調味品選項
            }
            else
            {
                CondimentBtnInitHide();//調味品按鈕初始化
            }
        }

        //---
        //系統菜單事件
        private async void LogoutBtn_Clicked(object sender, EventArgs e)//登出
        {
            LogFile.Write("MainPage End");
            await Shell.Current.GoToAsync("login");
        }

        private async void DevicesBtn_Clicked(object sender, EventArgs e)//周邊管理
        {
            await Navigation.PushModalAsync(new DevicesListPage());
        }

        private void SettingsBtn_Clicked(object sender, EventArgs e)//系統設定
        {

        }

        private async void SynchronizeBtn_Clicked(object sender, EventArgs e)//資料更新
        {
            await this.ShowPopupAsync(new QuesMessageBox("確定要執行資料更新?"));
            if (QuesMessageBox.m_blnResult)
            {
                if (HttpsFun.WebRequestTest(ref LoadingPage.m_intNetworkLevel))//判斷是否有網路
                {
                    await this.ShowPopupAsync(new SyncLocalDatabase());//同步本地端資料庫
                    LogFile.Write("MainPage End");
                    await Shell.Current.GoToAsync("login");//切換到登入頁面
                }
                else
                {
                    await this.ShowPopupAsync(new MessageBox("網路偵測異常,無法執行資料同步?"));
                }
            }
        }

        private void ShopcartListViewImage00_Clicked(object sender, TappedEventArgs e)
        {
            if(m_ShopcartItemSelected != null)
            {
                String StrBuf = m_ShopcartItemSelected.id;
                string[] strs = StrBuf.Split(',');
                int intMain = Int32.Parse(strs[0]);
                int intSub = Int32.Parse(strs[1]);
                if(intSub < 0)
                {
                    if(m_ShopcartItemSelected.image_id=="1")
                    {
                        m_ShopcartItemSelected.image_id = "2";//not check
                        m_ShopcartItemSelected.Image00 = m_StrShopcartIcons[1];//"checkbox01.png"
                    }
                    else
                    {
                        m_ShopcartItemSelected.image_id = "1";//checked
                        m_ShopcartItemSelected.Image00 = m_StrShopcartIcons[0];//"checkbox00.png"
                    }

                    ((Image)(sender)).Source = ImageSource.FromFile(m_ShopcartItemSelected.Image00);//換圖
                }
            }
        }

        private void ShopcartListViewImage01_Clicked(object sender, TappedEventArgs e)
        {
            if (m_ShopcartItemSelected != null)
            {
                String StrBuf = m_ShopcartItemSelected.id;
                string[] strs = StrBuf.Split(',');
                int intIndex = Int32.Parse(strs[0]);
                int intBuf = Int32.Parse(strs[1]);

            }
        }
        //---系統菜單事件
    }
}


備註:

Add/Modified 

將購物車顯示元件改回ListView
在ListView的Grid元件綁定BColor參數
在ListView的Grid元件綁定VisualStateGroupList
在ShopcartItem類別新增BColor成員
在ShopcartListView_ItemSelected事件函數實作 改變選擇列顏色 功能 ~ 因為VisualStateGroupList對於Selected 事件無反應

運行圖:


One thought on “C# Maui ListView 實作Select Item 改變顏色 [VisualState + Event Function]

  1. 『把Bug(錯誤)/Defect(缺陷) 變(VS) Feature(特色)/Function(功能)』 實際實作
    ~承認/接受/利用 錯誤/缺陷

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *