📄 scaffold.cs
字号:
sl.DataSource = (IRecordList<C>)root.RecordLists[availableRecordLists[b.Arg].Source];
sl.LabelFormat = availableRecordLists[b.Arg].Format;
sl.Mode = SelectionMode.Multiple;
sl.Init();
sl.OnChanged += new EventHandler<SelectItemEventArgs>(sl_OnChanged);
sl.DataBind();
sl.Record = b.Record;
sl.StateBag["RecordList"] = list;
b.Parent.Add(sl);
b.StateBag["Childwidget"] = sl;
foreach (Template t in sl.Items)
{
if (list.Contains(t.Record as C))
t.Widgets.Find<SelectItem>().Selected = true;
}
}
else
{
Scaffold<C> s = new Scaffold<C>();
s.customGridTemplates = this.customGridTemplates;
s.Record = b.Record;
s.rootScaffold = this.rootScaffold;
s.buttonType = this.buttonType;
s.ShowNewButton = this.ShowNewButton;
s.Model = typeof(C).FullName;
s.Id = "_scaffold";
if (this.customGridTemplates != null && this.customGridTemplates[s.Model] != null)
{
s.customGridTemplate = this.customGridTemplates[s.Model] as Pane;
}
s.DataSource = list;
s.Init();
b.Parent.Add(s);
b.StateBag["Childwidget"] = s;
}
}
else
{
b.Label = b.Label.Replace("Hide", "Show");
childwidget.Visible = false;
}
}
void sl_OnChanged(object sender, SelectItemEventArgs e)
{
Widget c = sender as Widget;
object childRecords = c.StateBag["RecordList"];
Type listType = childRecords.GetType();
if (e.Selected)
{
listType.InvokeMember(
"Add",
BindingFlags.InvokeMethod,
null,
childRecords,
new object[] { e.Item.Record });
}
else
{
listType.InvokeMember(
"Remove",
BindingFlags.InvokeMethod,
null,
childRecords,
new object[] { e.Item.Record });
}
c.Parent.Record.Save();
}
private void insertEditAndDeleteButtons( Pane pane )
{
PlaceHolder editPh = pane.Find( "EditPlaceHolder" ) as PlaceHolder;
PlaceHolder deletePh = pane.Find( "DeletePlaceHolder" ) as PlaceHolder;
if( editPh != null && editPh.Widgets == null )
{
Button editButton = RootContext.CreateUnkownWidget(buttonType) as Button;
editButton.Id = "Edit";
editButton.Label = "Edit";
editButton.OnClick += new OnClickHandler(editButton_OnClick);
editPh.Add( editButton );
}
if( deletePh != null && deletePh.Widgets == null )
{
Button deleteButton = RootContext.CreateUnkownWidget(buttonType) as Button;
deleteButton.Id = "Delete";
deleteButton.Label = "Delete";
deleteButton.OnClick += new OnClickHandler(deleteButton_OnClick);
deletePh.Add( deleteButton );
}
}
bool dataBound = false;
public void DataBind() { grid.DataBind(); addCounts(); dataBound = true; }
public bool IsDataBound { get { return dataBound; } set { dataBound = value; } }
private void addCounts()
{
IRecordList<T> items = grid.DataSource;
for( int i = 0; i < items.Count; i++ )
{
foreach (ColumnInfo fi in fieldInfos)
{
if (fi.DataType == DataType.RecordList)
{
Button b = grid.Widgets[i].Find("Show" + fi.Name) as Button;
if (b != null)
{
IRecordList r = items[i][fi.Name] as IRecordList;
b.Label += r == null ? string.Empty : "(" + r.Count + ")";
}
}
}
}
}
private void add_OnClick(Widget b, string e)
{
//add the form.
if( addPane == null )
{
addPane = new ModelForm<T>();
addPane.buttonType = this.buttonType;
addPane.Init();
addPane.OnSubmit += new OnSubmitHandler<T>(Add_OnSubmit);
addPane.id = "AddPane";
b.Parent.Add(addPane);
}
else
{
addPane.Visible = true;
addPane.Record = new T();
addPane.BindForm();
}
}
void Add_OnSubmit(ModelForm<T> sender, object arg)
{
Scaffold<T> s = sender.FindAncestor<Scaffold<T>>();
dataSource.Add(sender.Record as T);
//grid.AddItem(sender.Record as T);
addPane.Visible = false;
addPane.UnbindForm();
}
public override void ParseElement(System.Xml.XmlNode n)
{
//override for Grid, which is essenially a repeater.
//and Add and Edit forms, which will be some sort of Pane.
switch (n.Name)
{
case "GridTemplate":
ParseGridTemplate(n);
break;
case "AvailableRecords":
ParseAvailableRecords(n);
break;
}
}
Dictionary<string, AvailableRecordInfo> availableRecordLists;
private void ParseAvailableRecords(System.Xml.XmlNode n)
{
//Field="InStockAt" Source="availableStores"
if (availableRecordLists == null)
availableRecordLists = new Dictionary<string, AvailableRecordInfo>();
AvailableRecordInfo info = new AvailableRecordInfo();
info.Source = n.Attributes["Source"].Value;
if( n.Attributes["Format"] != null )
info.Format = n.Attributes["Format"].Value;
availableRecordLists[n.Attributes["Field"].Value] = info;
}
private void ParseGridTemplate(System.Xml.XmlNode n)
{
string model = null;
if (n.Attributes["Model"] != null)
{
model = n.Attributes["Model"].Value;
n.Attributes.Remove(n.Attributes["Model"]);
}
if (n.Attributes["Order"] != null)
{
order = n.Attributes["Order"].Value;
n.Attributes.Remove(n.Attributes["Order"]);
}
Pane p = RootContext.CreateWidget<Pane>();
p.ParseAttributes(n);
p.ParseXml(n);
if (model == null)
{
customGridTemplate = p;
}
else
{
if (customGridTemplates == null)
customGridTemplates = new Hashtable();
customGridTemplates[model] = p;
}
}
private void editButton_OnClick(Widget b, string e)
{
Template t = b.FindAncestor<Template>();
Widget editForm = t.Widgets["editForm"];
if( editForm == null )
{
ModelForm<T> mf = new ModelForm<T>();
mf.buttonType = this.buttonType;
mf.Record = t.Record;
mf.Init();
mf.OnSubmit += new OnSubmitHandler<T>(Edit_OnSubmit);
mf.OnCancel += new OnCancelHandler<T>(mf_OnCancel);
mf.id = "editForm";
b.Parent.Parent.InsertBefore(mf);
}
else
{
editForm.Visible = true;
}
b.Parent.Parent.Visible = false;
}
void mf_OnCancel(ModelForm<T> sender)
{
sender.FindAncestor<Template>().Widgets[1].Visible = true;
}
void Edit_OnSubmit(ModelForm<T> sender, object arg)
{
Template t = sender.FindAncestor<Template>();
AbstractRecord rec = t.Record;
t.DataBindWidget();
t.Widgets.Find("editForm").Visible = false;
t.Widgets[1].Visible = true;
}
private void deleteButton_OnClick(Widget b, string e)
{
Scaffold<T> s = b.FindAncestor<Scaffold<T>>();
Template t = b.FindAncestor<Template>();
b.Record.Delete();
if( s.Record != null )
{
s.Record.Save();
}
while( t.Widgets.Count > 0 )
t.RemoveChild( t.Widgets[0] );
}
#region IDataSourced Members
IRecordList IDataSourced.DataSource
{
get
{
return DataSource as IRecordList;
}
set
{
DataSource = value as IRecordList<T>;
}
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -