LightSwitch学习阶段疑难问答

本文分享了在使用LightSwitch开发过程中遇到的问题解决方法及经验总结,包括环境配置、OOB模式下的窗口打开方式、获取当前URI、跨进程调用、数据权限设置等关键点,旨在帮助开发者更高效地进行项目开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 为T 5、如何设置默认值: 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只是在客户端执行数据过滤功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值