VSTO实现的一个动态生成的业务数据操作界面:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//
初始化菜单和Pane
private void ThisWorkbook_Startup( object sender, System.EventArgs e)
{
// TextBox tb1 = new TextBox();
// tb1.Left = 100;
// tb1.Top = 100;
ExcelTaskTrackPanel editControl = new ExcelTaskTrackPanel();
// editControl.Controls.Add(tb1);bo
this .ActionsPane.Controls.Add(editControl);
// this.Application.Workbooks["ExcelTaskTrack"].CommandBars.ActiveMenuBar.Controls["T1"].Delete(false);
ExcelBulidMainMenu exBulidMainMen = new ExcelBulidMainMenu();
exBulidMainMen.BulidMainMenu( this .Application.Workbooks[ " ExcelTaskTrack1 " ]);
}
private void ThisWorkbook_Startup( object sender, System.EventArgs e)
{
// TextBox tb1 = new TextBox();
// tb1.Left = 100;
// tb1.Top = 100;
ExcelTaskTrackPanel editControl = new ExcelTaskTrackPanel();
// editControl.Controls.Add(tb1);bo
this .ActionsPane.Controls.Add(editControl);
// this.Application.Workbooks["ExcelTaskTrack"].CommandBars.ActiveMenuBar.Controls["T1"].Delete(false);
ExcelBulidMainMenu exBulidMainMen = new ExcelBulidMainMenu();
exBulidMainMen.BulidMainMenu( this .Application.Workbooks[ " ExcelTaskTrack1 " ]);
}
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//
动态创建业务数据界面
private UserTable CreateUserTable( int ruleId)
{
DataTable dtFields = new DataTable();
// dtFields = DBHelper.GetTable("SELECT [ESM_SYSUIROLE].*,[ESM_SYSFIELDSROLE].* FROM [ESM_RULEFLD],[ESM_SYSFIELDSROLE],[ESM_SYSUIROLE],[ESM_RULE]" +
// "WHERE [ESM_RULEFLD].RU_OBJECT_ID=" + ruleId + " AND [ESM_RULEFLD].RU_OBJECT_ID=[ESM_RULE].RU_OBJECT_ID"+
// " AND [ESM_RULEFLD].UR_CLASS_ID=[ESM_SYSUIROLE].UR_CLASS_ID");
dtFields = DBHelper.GetTable( " SELECT ESM_SYSUIROLE.UR_OBJECT_ID, ESM_SYSUIROLE.UR_CLASS_ID, ESM_SYSUIROLE.FR_CLASS_ID, ESM_SYSUIROLE.FR_OBJECT_ID, " +
" ESM_SYSUIROLE.SR_OBJECT_ID, ESM_SYSUIROLE.UITYPE, ESM_SYSUIROLE.ALLOWEDIT, ESM_SYSUIROLE.VISIBLE, " +
" ESM_SYSUIROLE.HEADRANGEROW, ESM_SYSUIROLE.HEADRANGECOL, ESM_SYSFIELDSROLE.FR_OBJECT_ID AS Expr1, " +
" ESM_SYSFIELDSROLE.FR_CLASS_ID AS Expr2, ESM_SYSFIELDSROLE.FIELD_NAME, ESM_SYSFIELDSROLE.FIELD_INDEX, " +
" ESM_SYSFIELDSROLE.DATATYPE, ESM_SYSFIELDSROLE.REALNAME, ESM_SYSFIELDSROLE.TABLENAME, " +
" ESM_SYSFIELDSROLE.DATABASENAME, ESM_SYSFIELDSROLE.FIELD_LENGTH, ESM_SYSFIELDSROLE.ISNULL, ESM_SYSFIELDSROLE.TABLEID, " +
" ESM_SYSFIELDSROLE.REGEX, ESM_SYSFIELDSROLE.ISPK, ESM_SYSFIELDSROLE.ISFK, ESM_SYSFIELDSROLE.TOOlMESSAGE, " +
" ESM_SYSFIELDSROLE.ERRORMESSAGE " +
" FROM ESM_RULEFLD INNER JOIN " +
" ESM_RULE ON ESM_RULEFLD.RU_OBJECT_ID = ESM_RULE.RU_OBJECT_ID INNER JOIN " +
" ESM_SYSUIROLE ON ESM_RULEFLD.UR_CLASS_ID = ESM_SYSUIROLE.UR_CLASS_ID INNER JOIN " +
" ESM_SYSFIELDSROLE ON ESM_SYSUIROLE.FR_OBJECT_ID = ESM_SYSFIELDSROLE.FR_OBJECT_ID " +
" WHERE(ESM_RULEFLD.RU_OBJECT_ID = " + ruleId + " ) ORDER BY ESM_SYSFIELDSROLE.FIELD_INDEX " );
UserTable table = new UserTable();
table.TbName = " ESM_APPORDERFLOW " ;
List < Column > list = new List < Column > ();
// return table;
foreach (DataRow dr in dtFields.Rows)
{
Column col = new Column();
col.ColId = ( int )dr[ " FR_OBJECT_ID " ];
col.ColName = dr[ " REALNAME " ].ToString ();
col.ColDisplyName = dr[ " FIELD_NAME " ].ToString ();
col.ColDBType = dr[ " DATATYPE " ].ToString ();
col.ErrorMessage = dr[ " ERRORMESSAGE " ].ToString();
col.IsPK = ( bool )dr[ " ISPK " ];
col.Length = int .Parse(dr[ " FIELD_LENGTH " ].ToString ());
col.Regex = dr[ " REGEX " ].ToString();
col.ToolMessage = dr[ " TOOLMESSAGE " ].ToString();
list.Add(col);
}
table.Columns = list;
return table;
// col.ColId = 1;
// col.ColName = "productID";
// col.ColDisplyName = "产品代码";
// col.ColDBType = "varchar";
// col.ErrorMessage = "产品代码错误,只能是2-10个数字和字母!";
// col.IsPK = true;
// col.Length = 10;
// col.Regex = "^[0-9A-Za-z]{2,10}$";
// col.ToolMessage = "只能是数字和字母";
// list.Add(col);
}
private UserTable CreateUserTable( int ruleId)
{
DataTable dtFields = new DataTable();
// dtFields = DBHelper.GetTable("SELECT [ESM_SYSUIROLE].*,[ESM_SYSFIELDSROLE].* FROM [ESM_RULEFLD],[ESM_SYSFIELDSROLE],[ESM_SYSUIROLE],[ESM_RULE]" +
// "WHERE [ESM_RULEFLD].RU_OBJECT_ID=" + ruleId + " AND [ESM_RULEFLD].RU_OBJECT_ID=[ESM_RULE].RU_OBJECT_ID"+
// " AND [ESM_RULEFLD].UR_CLASS_ID=[ESM_SYSUIROLE].UR_CLASS_ID");
dtFields = DBHelper.GetTable( " SELECT ESM_SYSUIROLE.UR_OBJECT_ID, ESM_SYSUIROLE.UR_CLASS_ID, ESM_SYSUIROLE.FR_CLASS_ID, ESM_SYSUIROLE.FR_OBJECT_ID, " +
" ESM_SYSUIROLE.SR_OBJECT_ID, ESM_SYSUIROLE.UITYPE, ESM_SYSUIROLE.ALLOWEDIT, ESM_SYSUIROLE.VISIBLE, " +
" ESM_SYSUIROLE.HEADRANGEROW, ESM_SYSUIROLE.HEADRANGECOL, ESM_SYSFIELDSROLE.FR_OBJECT_ID AS Expr1, " +
" ESM_SYSFIELDSROLE.FR_CLASS_ID AS Expr2, ESM_SYSFIELDSROLE.FIELD_NAME, ESM_SYSFIELDSROLE.FIELD_INDEX, " +
" ESM_SYSFIELDSROLE.DATATYPE, ESM_SYSFIELDSROLE.REALNAME, ESM_SYSFIELDSROLE.TABLENAME, " +
" ESM_SYSFIELDSROLE.DATABASENAME, ESM_SYSFIELDSROLE.FIELD_LENGTH, ESM_SYSFIELDSROLE.ISNULL, ESM_SYSFIELDSROLE.TABLEID, " +
" ESM_SYSFIELDSROLE.REGEX, ESM_SYSFIELDSROLE.ISPK, ESM_SYSFIELDSROLE.ISFK, ESM_SYSFIELDSROLE.TOOlMESSAGE, " +
" ESM_SYSFIELDSROLE.ERRORMESSAGE " +
" FROM ESM_RULEFLD INNER JOIN " +
" ESM_RULE ON ESM_RULEFLD.RU_OBJECT_ID = ESM_RULE.RU_OBJECT_ID INNER JOIN " +
" ESM_SYSUIROLE ON ESM_RULEFLD.UR_CLASS_ID = ESM_SYSUIROLE.UR_CLASS_ID INNER JOIN " +
" ESM_SYSFIELDSROLE ON ESM_SYSUIROLE.FR_OBJECT_ID = ESM_SYSFIELDSROLE.FR_OBJECT_ID " +
" WHERE(ESM_RULEFLD.RU_OBJECT_ID = " + ruleId + " ) ORDER BY ESM_SYSFIELDSROLE.FIELD_INDEX " );
UserTable table = new UserTable();
table.TbName = " ESM_APPORDERFLOW " ;
List < Column > list = new List < Column > ();
// return table;
foreach (DataRow dr in dtFields.Rows)
{
Column col = new Column();
col.ColId = ( int )dr[ " FR_OBJECT_ID " ];
col.ColName = dr[ " REALNAME " ].ToString ();
col.ColDisplyName = dr[ " FIELD_NAME " ].ToString ();
col.ColDBType = dr[ " DATATYPE " ].ToString ();
col.ErrorMessage = dr[ " ERRORMESSAGE " ].ToString();
col.IsPK = ( bool )dr[ " ISPK " ];
col.Length = int .Parse(dr[ " FIELD_LENGTH " ].ToString ());
col.Regex = dr[ " REGEX " ].ToString();
col.ToolMessage = dr[ " TOOLMESSAGE " ].ToString();
list.Add(col);
}
table.Columns = list;
return table;
// col.ColId = 1;
// col.ColName = "productID";
// col.ColDisplyName = "产品代码";
// col.ColDBType = "varchar";
// col.ErrorMessage = "产品代码错误,只能是2-10个数字和字母!";
// col.IsPK = true;
// col.Length = 10;
// col.Regex = "^[0-9A-Za-z]{2,10}$";
// col.ToolMessage = "只能是数字和字母";
// list.Add(col);
}