LightSwitch学习阶段疑难问答

来源:互联网 发布:报价单自动生成软件 编辑:程序博客网 时间:2024/06/11 23:15

 LIGHTSWITCH学习一阶段,通过实际项目进行练手,期间也遇到了不少问题,通过查询MSDN,访问LIGHTSwitch开发团队BLOG,也积累了一点经验。特此记录,以留后人学习时参考。

一开始时,LightSwitch环境很不正常,VS的工具箱也找不到,同时无法进行代码编辑。此问题经查,初步可以判断是安装了Async-CTP1所致(可能与ls处理有冲突)。但直接卸载该工具却无效,只得全部重装系统。

 

1、OOB模式下禁用System.Windows.Browser.HtmlPage.Window.Navigate方法,如何打开一个新的窗口。    if (AutomationFactory.IsAvailable)            {                dynamic shell = AutomationFactory.CreateObject("Shell.Application");                shell.ShellExecute("http://localhost");            }            else if (!System.Windows.Application.Current.IsRunningOutOfBrowser)            {                System.Windows.Browser.HtmlPage.Window.Navigate(new Uri("http://localhost"), "_blank");            }2、Lightswitch中如何取得当前URI,同上OOB模式System.Windows.Application.Current.Host.Source 而非默认的Application.Current.3、跨进程调用,如显示自定义的窗体:  Dispatchers.Main.BeginInvoke(() =>            {                SelectFileWindow selectFileWindow = new SelectFileWindow();                selectFileWindow.Closed += new EventHandler(selectFileWindow_Closed);                selectFileWindow.Show();            });4、IVisualCollection<T>.AddNew() 不应从 UI 线程中进行调用,此问题出在一个异步调用完成(如上传文件成功后),需对集合进行操作时。   ProjectDocData.Details.Dispatcher.BeginInvoke(() =>            {                var data = ProjectDocData.AddNew();                data.DisplayName = e.ItemInfo.Name;                data.FilePath = "fa";                data.ProjectDocItem = this.ProjectDoc.SelectedItem;                //  });            });ProjectDocData 为T5、如何设置默认值:1.在数据源表的Created事件中处理public partial class WorkPlanHead    {        partial void PlanYearMonth_Compute(ref string result)        {            // 将结果设置为所需的字段值            result = string.Format("{0}年{1}月", this.PlanYear, this.PlanMonth);        }        partial void WorkPlanHead_Created()        {            if (DateTime.Now.Month == 12)            {                this.PlanYear = DateTime.Now.Year + 1;                this.PlanMonth = 1;            }            else            {                this.PlanYear = DateTime.Now.Year;                this.PlanMonth = DateTime.Now.Month + 1;            }            this.FillDate = DateTime.Now;        }    }2.在SCREEN事件中处理  public partial class WorkPlanHeadsListDetail    {        partial void WorkPlanHeadsListDetail_Created()        {            // 在此编写您的代码。         //   PlanYear1为SCREEN中控件的名字;            this.FindControl("PlanYear1").ControlAvailable += new EventHandler<ControlAvailableEventArgs>(WorkPlanHeadsListDetail_ControlAvailable);        }        void WorkPlanHeadsListDetail_ControlAvailable(object sender, ControlAvailableEventArgs e)        {            var t = e.Control as TextBox;        }    }6、It is not valid to create a Data Workspace on the current thread because it was not created by the LightSwitch runtime这是在发布模式(布署到应用现场或Release)模式下,LS不支持自定义设置窗口。该功能仅提供给开发人员调试时使用,需VS环境运行支持。7、如何处理数据的权限,即某些人可以访问全部数据,而部分人只能访问自己的数据使用数据实体的XX_All_PreprocessQuery方法进行数据的过滤,此过程在服务器端执行。partial void WorkPlanDetails_All_PreprocessQuery(ref IQueryable<WorkPlanDetail> query)        {            if (!Application.User.HasPermission(Permissions.CreateMonthPlanHead)) //如果没有创建计划主体的权限,仅显示自己相关的计划内容            {                query = query.Where(p => p.Filler == Application.User.FullName);            }        }注:在SCREEN上,可通过给数据源加上过滤条件(参数)来判断,但SCREEN成功执行只显示一部分数据,导出数据时却导出全部的数据。因此,估计SCREEN只是在客户端执行数据过滤功能。


 

原创粉丝点击