private CoreEA.ICoreEAHander CreateHandler(UIElement curElement)
        {
            CoreEA.ICoreEAHander tempHandler = null;

            ISrcControl srcControl = (ISrcControl)curElement;

            try
            {
                #region Source Control Handler
                if (curElement.GetType() == typeof(SelectSourceDbFile_OleDB))
                {
                    SelectSourceDbFile_OleDB curUI = curElement as SelectSourceDbFile_OleDB;
                    switch (curUI.CurrentDbType)
                    {
                    case UsingOleDbType.Excel:
                        tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.Excel).X_Handler;
                        tempHandler.Open((LoginInfo_Excel)srcControl.X_Result);
                        break;

                    case UsingOleDbType.Access:
                        tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.OleDb).X_Handler;
                        tempHandler.Open((LoginInfo_Oledb)srcControl.X_Result);
                        break;

                    case UsingOleDbType.CSV:
                        tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.CSV).X_Handler;
                        tempHandler.Open((LoginInfo_CSV)srcControl.X_Result);
                        break;
                    }
                }
                else if (curElement.GetType() == typeof(SelectSqlServerSource))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.SqlServer).X_Handler;
                    tempHandler.Open((LoginInfo_SqlServer)srcControl.X_Result);
                }
                else if (curElement.GetType() == typeof(SelectMySqlSource))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.MySql).X_Handler;
                    tempHandler.Open((LoginInfo_MySql)srcControl.X_Result);
                }
                else if (curElement.GetType() == typeof(SelectSqlite3DbFile))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.Sqlite).X_Handler;
                    tempHandler.Open((LoginInfo_Sqlite)srcControl.X_Result);
                }
                else if (curElement.GetType() == typeof(SelectSSCEFile))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.SqlCE35).X_Handler;
                    tempHandler.Open((LoginInfo_SSCE)srcControl.X_Result);
                }
                else if (curElement.GetType() == typeof(SelectEffiproz))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.Effiproz).X_Handler;
                    tempHandler.Open((LoginInfo_Effiproz)srcControl.X_Result);
                }
                #endregion

                #region TargetControlHandler
                //Here the type is the class name of TargetUI
                else if (curElement.GetType() == typeof(SelectTargetDb_SqlCe))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.SqlCE35).X_Handler;
                    LoginInfo_SSCE ceInfo = srcControl.X_Result as LoginInfo_SSCE;
                    ceInfo.MaxDbSize = 3000;

                    tempHandler.Open(ceInfo);
                }
                else if (curElement.GetType() == typeof(SelectSqlServerTarget))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.SqlServer).X_Handler;
                    tempHandler.Open((LoginInfo_SqlServer)srcControl.X_Result);
                }
                else if (curElement.GetType() == typeof(SelectTargetSqliteDB))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.Sqlite).X_Handler;
                    tempHandler.Open((LoginInfo_Sqlite)srcControl.X_Result);
                }
                else if (curElement.GetType() == typeof(SelectTargetMySql))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.MySql).X_Handler;
                    tempHandler.Open((LoginInfo_MySql)srcControl.X_Result);
                }
                else if (curElement.GetType() == typeof(SelectTargetCSVFile))
                {
                    tempHandler = new CoreEA.CoreE(CoreEA.CoreE.UsedDatabaseType.CSV).X_Handler;
                    LoginInfo_CSV tempLogInfo = srcControl.X_Result as LoginInfo_CSV;
                    tempLogInfo.Database += "1.csv";

                    tempHandler.Open(tempLogInfo);
                }
                #endregion
            }
            catch (Exception ee)
            {
                ee.HandleMyException();
            }

            Debug.Assert(tempHandler != null, "Handler can't be null");
            return(tempHandler);
        }
        private void butNext_Click(object sender, RoutedEventArgs e)
        {
            //Do data transfer if finished
            if (tab1.SelectedIndex == tab1.Items.Count - 1)
            {
                if (!"DataTransferConfrimMsg".GetFromResourece().Confirm())
                {
                    return;
                }

                //Filter system table
                List <string> tableList = new List <string>();

                listTablesList.SelectedItems.Cast <string>().ToList().ForEach(subItem =>
                {
                    tableList.Add(subItem);
                });

                if (tableList.Count < 1)
                {
                    "DataTransferNoTableMsg".GetFromResourece().Notify();
                    return;
                }

                DoExchangeData(srcHandler, targetHandler, tableList);
                return;
            }

            if (tab1.SelectedIndex == 2)
            {
                if (listTablesList.SelectedItems.Count == 0)
                {
                    "DataTransferSelectTableMsg".GetFromResourece().Notify();
                    return;
                }
            }

            #region Generate the Handler
            Debug.WriteLine(((StackPanel)((TabItem)tab1.SelectedItem).Content).Children[0].GetType());
            UIElement curElement = ((StackPanel)((TabItem)tab1.SelectedItem).Content).Children[0];
            if (curElement.GetType().BaseType == typeof(UserControl))
            {
                ISrcControl tempSrcControl = (ISrcControl)curElement;

                if (!tempSrcControl.X_CanForwardToNext)
                {
                    tempSrcControl.X_ShowErrorTips();
                    return;
                }
                else
                {
                    if (tempSrcControl.X_IsSourceHandler)
                    {
                        if ((srcHandler != null) && (srcHandler.IsOpened))
                        {
                            srcHandler.Close();
                        }
                        srcHandler = CreateHandler(curElement);
                        if (!srcHandler.IsOpened)
                        {
                            "ErrorMsg_CannotConnectToSource".GetFromResourece().Warning();
                            return;
                        }
                    }
                    else
                    {
                        if ((targetHandler != null) && (targetHandler.IsOpened))
                        {
                            targetHandler.Close();
                        }
                        targetHandler = CreateHandler(curElement);
                        if (!targetHandler.IsOpened)
                        {
                            "ErrorMsg_CannotConnectToTarget".GetFromResourece().Warning();
                            return;
                        }
                    }
                }
            }

            #endregion

            tab1.SelectedIndex = 1 + tab1.SelectedIndex;

            //Select Source
            if (tab1.SelectedIndex == 1)
            {
                CurSrcDbType = ((DbTypeWrapper)cmbSrcDbType.SelectedItem).MyType;

                srcDbFileContainer.Children.Clear();

                ISrcControl srcControl = SourceControlFactory.GetProcessingControl(CurSrcDbType, true);
                if (srcControl == null)
                {
                    "DataTransfer_NotSupportDBType".GetFromResourece().Notify();
                    return;
                }
                srcDbFileContainer.Children.Add((UserControl)srcControl);
            }

            if (tab1.SelectedIndex == 2)
            {
                listTablesList.DataContext = null;

                List <string> t = srcHandler.GetTableListInDatabase();


                t.Sort();
                listTablesList.DataContext = t;
            }

            //Select Target Type
            if (tab1.SelectedIndex == 4)
            {
                CurTargetDbType = ((DbTypeWrapper)cmbTargetDbType.SelectedItem).MyType;

                targetDbFileContainer.Children.Clear();

                ISrcControl targetControl = SourceControlFactory.GetProcessingControl(CurTargetDbType, false);
                if (targetControl == null)
                {
                    "DataTransfer_NotSupportDBType".GetFromResourece().Notify();
                    return;
                }
                targetDbFileContainer.Children.Add((UserControl)targetControl);
            }

            //No next page
            if (tab1.SelectedIndex == tab1.Items.Count - 1)
            {
                resultSrcFile.Text    = srcHandler.CurDatabase;
                resultTargetFile.Text = targetHandler.CurDatabase;
                butNext.Content       = "Start";
            }

            butBack.IsEnabled = true;
        }