接前面的文章继续。
前面讲了MyGeneration的使用,以及如何自己写模板显示UI,现在开始讲如何将数据库的信息显示到UI上。
在MyGeneraion脚本系统中,有一个全局变量,叫做MyMeta,他是dbRoot类型的。通过这个全局变量,我们可以获得数据库相关的信息。这个变量在Interface Code 和Template Code中都可以使用。
从上节代码来看,我们建立Form窗口的时候,就把这个变量给传给了Form窗口
如下代码所示:
MyForm form = new MyForm(MyMeta, input);
那么dbRoot类型的MyMeta变量都有哪些功能,有哪些函数,属性可以使用呢?
我们可以查找帮助,通过MyGeneration菜单 “File – Help – MyMeta API Reference”可以打开其帮助,里面有dbRoot的详细介绍,如下图所示:
大概看一下API,然后我们就可以修改我们的模板了,将其修改如下:
- private void Form1_Load(object sender, EventArgs e)
- {
- //获取数据库,传给ComboBox
- comboBox1.DataSource = this.myMeta.Databases;
- //ComboBox显示数据库名
- this.comboBox1.DisplayMember = "Name";
- if(this.myMeta.DefaultDatabase != null)
- {
- //选中默认的数据库
- this.comboBox1.SelectedIndex = this.comboBox1.FindStringExact(this.myMeta.DefaultDatabase.Name);
- //通过IDatabase 的Tables属性取得数据库里面所有的数据表
- //作为数据源传给ListBox
- this.listBox1.DataSource = this.myMeta.DefaultDatabase.Tables;
- //ListBox显示数据表的名字
- this.listBox1.DisplayMember = "Name";
- }
- }
就算没有注释,这代码也很好懂吧。
呵呵,由此可见,我们可以通过MyMeta得到IDataBases,然后获得ITable,在通过ITable
获得数据表的信息……反正呢,照这条线找下去,基本上数据库里有哪些表,表里有哪些字段,有哪些存储过程,任何信息都可以很容易的得到。当然了,在自己写模板之前,最好先大概看一下“MyMeta API Reference”,这样就写模板就会更得心应手了。
下面接下来看Form点击OK之后的代码吧
- private void button1_Click(object sender, EventArgs e)
- {
- IDatabase database = this.comboBox1.SelectedValue as IDatabase;
- ITable table = this.listBox1.SelectedValue as ITable;
- this.zeusInput["databaseName"] = database.Name;
- this.zeusInput["tableName"] = table.Name;
- this.DialogResult = DialogResult.OK;
- this.Close();
- }
这用到了MyGeneration的一个非常重要的类IZeusInput。
改接口的详细信息请看帮助 “File – help – Zeus API Reference”。
在这里我们简单的把UI上选中的数据库的名字和数据表的名字存在了IZeusInput变量中。大家注意看下Form的IZeumInput是如何来的吧。
这样,我们就完成了该模板的Interface Code的代码,最后形成的Interface Code就如下所示:
- <%#REFERENCE System.Windows.Forms.dll, System.Drawing.dll %>
- <%#NAMESPACE System.Windows.Forms, System.Drawing %>
- public class GeneratedGui : DotNetScriptGui
- {
- public GeneratedGui(ZeusContext context) : base(context) {}</