📄 modelform.cs~
字号:
/** * Project: emergetk: stateful web framework for the masses * File name: ModelForm.cs * Description: Generates web forms based on the underlying data model. * * @author Ben Joldersma, All-In-One Creations, Ltd. http://all-in-one-creations.net, Copyright (C) 2006. * * @see The GNU Public License (GPL) *//* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */using System;using System.Collections;using System.Collections.Generic;using System.Text;using EmergeTk.Model;using EmergeTk.Widgets.Html;namespace EmergeTk{ public delegate void OnSubmitHandler<T>(ModelForm<T> sender, object arg) where T : AbstractRecord, new(); public delegate void OnCancelHandler<T>(ModelForm<T> sender) where T : AbstractRecord, new(); public class ModelForm<T> : Pane where T : AbstractRecord, new() { internal Type buttonType = typeof(LinkButton); private string button; public string Button { get { return button; } set { button = value; buttonType = TypeLoader.GetType(button); } } private string buttonLabel = "Submit"; public string ButtonLabel { get { return buttonLabel; } set { buttonLabel = value; } } public event OnSubmitHandler<T> OnSubmit; public event OnCancelHandler<T> OnCancel; private object onSubmitArg; public object OnSubmitArg { get { return onSubmitArg; } set { onSubmitArg = value; } } Model.ColumnInfo[] fields; public override string ClientClass { get { return "Pane"; } } public override void Init() { ClassName = "simplePane"; if (Record == null) { Record = new T(); } fields = Record.Fields; foreach(Model.ColumnInfo fi in fields) { Widget propwidget = DataTypeFieldBuilder.GetEditWidget<T>( fi, FieldLayout.Spacious ); if( propwidget != null ) Add( propwidget ); } BindForm(); Button button = Context.Current.CreateUnkownWidget(buttonType) as Button; button.Label = buttonLabel; button.OnClick += new OnClickHandler(button_OnClick); Add( button ); Button cancel = RootContext.CreateUnkownWidget(buttonType) as Button; cancel.Label = "Cancel"; cancel.Arg = buttonLabel; cancel.OnClick += new OnClickHandler(cancel_OnClick); Add( cancel ); } void cancel_OnClick(Widget sender, string args) { this.Visible = false; if( OnCancel != null ) OnCancel(this); } void button_OnClick(Widget sender, string args) { Record.Save(); if( OnSubmit != null ) OnSubmit(this, onSubmitArg); } public void BindForm() { foreach (ColumnInfo fi in fields) { Widget c = Find(fi.Name); if (c != null && c is IDataBindable) { IDataBindable i = c as IDataBindable; c.Bind(i.DefaultProperty, Record, fi.Name); } } } public void UnbindForm() { foreach (ColumnInfo fi in fields) { if (fi.DataType != DataType.RecordList) { Widget c = Find(fi.Name); c.Unbind(); } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -