动态表单的技术实现
时间:2011-05-03 来源:陈高
1.1. 动态表单的技术实现
if (dr["ET_ConfigType"].ToString() == "1") // 文本类型
{
GridViewDataColumn col = new GridViewDataColumn();
col.Header = dr["ET_ConfigItem"].ToString().Trim();
col.UniqueName = dr["KeyWord"].ToString();
col.Width = 100;
col.Footer = "string";
col.DataType = Type.GetType("string");
col.DataType = typeof(string);
col.DataMemberBinding = new Binding(string.Format("{0}", dr["KeyWord"].ToString()));
this.RadGridView1.Columns.Insert(i + 1, col);
}
else if (dr["ET_ConfigType"].ToString() == "5")//下拉列表
{
GridViewComboBoxColumn cboCM = new GridViewComboBoxColumn();
cboCM.Header = dr["ET_ConfigItem"].ToString().Trim();
cboCM.UniqueName = dr["KeyWord"].ToString();
cboCM.Width = 100;
cboCM.Footer = "ComboBox";
string comboxTypeID = dr["ComboxType"].ToString();
DataRow[] drNew = dt_EntityType.Select(string.Format(@"belongID = '{0}'",comboxTypeID));
List<CMBSoure> list = new List<CMBSoure>();
if (drNew.Length > 0)
{
for (int k = 0; k < drNew.Length; k++)
{
CMBSoure cmb = new CMBSoure();
cmb.CMBName = drNew[k]["TypeName"].ToString();
cmb.CMBValue = drNew[k]["TypeID"].ToString();
list.Add(cmb);
}
}
else
{
CMBSoure cmb = new CMBSoure();
cmb.CMBName = "暂无信息";
cmb.CMBValue = "暂无信息";
list.Add(cmb);
}
cboCM.DataMemberBinding = new Binding(dr["KeyWord"].ToString());
cboCM.SelectedValueMemberPath = "CMBValue";
cboCM.DisplayMemberPath = "CMBName";
cboCM.ItemsSource = list;
this.RadGridView1.Columns.Insert(i + 1, cboCM);
}
通过
col.UniqueName = dr["KeyWord"].ToString col.DataMemberBinding = new Binding(string.Format("{0}", dr["KeyWord"].ToString())
来实现对应关系的建立。而且我们还通过需要同的类型,来加载绑定列的相关信息。
1.1.4. 取得的成果应用动态表单技术,满足表单多变性的要求,具有较高的灵活性。动态表单可维护性好,可根据具体需求进行动态配置,可在很多管理信息系统中得到应用,减少重复开发工作。
具体实现效果可见工程项目管理系统工程范围信息维护页面,页面菜单路径:工程项目管理系统->项目范围管理->项目范围信息管理->工程范围信息维护。
1.1.5. 存在问题及改进
动态表单采用二维数据库表进行数据的存储,当数据量大或表单数据项多时,对性能会有一定的影响。动态表单具有局限性,适用于业务数据量小和动态多变的特点的业务系统,而当业务数据量大且表单结构稳定的情况下,建议采用固定表单的方式。