a)        表单列配置表将线路工程表单代码设为“612”,其中就是数据库对应字段“ET_ID”。”ET_Config” 和“ET_ConfigItem”用来表示该表单列信息的ID和名称。ET_ConfigType用来表示该列的类型,如:字符型、数字型、布尔型、下拉列表型等等。这样就可以规范填写表单的信息。其中,“KeyWord”字段有着重要的作用,他是动态表单中列与实体类对应关系的关键。通过该字段的信息我们才能将表单中信息与其含义相对应。b)        表单数据存储表表单的数据信息将以二维表的形式进行储存。表单的列信息将作为“Y”方向,行标识(即“X”方向)将采用具有唯一性的Guid编码来实现。字段“o_Guid”作为行的唯一标识,字段“ET_ConfigID”作为列的唯一性标识。字段“ET_Value”存放的就是所对应的值。在数据库设计方面,还有其他表辅助表如:CDMS_EntityTypeConfig、CDMS_EntityTypeConnection等数据库表,来辅助动态表单功能,使其功能更加的完善。在此不做详细介绍了。(2).   程序的实现动态的表单的关键就是对应关系的建立。在程序上,有用反射类方法进行实现的,有通过制定表单规则进行辨别实现的。

解决方案 »

  1.   

    这是生成标签的代码。我做修改操作时,点击提交后TextBox文本框取不到值。        case "2": // Lable 标签
                            Panel div2 = new Panel();
                            Label Text1 = new Label();
                            string Str_Size = DataS.Tables[0].Rows[0][7].ToString();
                            string Str_Color = DataS.Tables[0].Rows[0][6].ToString();
                            Text1.Text = DataS.Tables[0].Rows[0][8].ToString();                        if (Str_Size == "-1")
                            {
                                Str_Size = "12";
                            }
                            if (Str_Color == "-1")
                            {
                                Str_Color = "#000000";
                            }
                            Text1.Font.Size = new FontUnit(Str_Size);
                            Text1.ForeColor = System.Drawing.ColorTranslator.FromHtml(Str_Color);
                            div2.Controls.Add(Text1);
                            div2.Style["margin-top"] = yStr;
                            div2.Style["margin-left"] = xStr;
                            div2.Style["position"] = "absolute";                        form1.Controls.Add(div2);
                            break;                    case "3": // 单文本输入框
                            Panel div3 = new Panel();
                            TextBox MyTextBox = new TextBox();
                            if (myWidth != "px")
                            {
                                MyTextBox.Style["width"] = myWidth;
                            }
                            if (myHeight != "px")
                            {
                                MyTextBox.Style["height"] = myHeight;
                            }
                            MyTextBox.ID = DataS.Tables[0].Rows[0][6].ToString();
                            SArr = DataS.Tables[0].Rows[0][9].ToString();
                            if (SArr != "")
                            {
                                //MyTextBox.Style["overflow"] = SArr;
                                MyTextBox.TextMode = System.Web.UI.WebControls.TextBoxMode.MultiLine;
                            }
                            div3.Style["margin-top"] = yStr;
                            div3.Style["margin-left"] = xStr;
                            div3.Style["position"] = "absolute";
                            div3.Controls.Add(MyTextBox);
                            form1.Controls.Add(div3);
                            break;
      

  2.   

    动态表单难做, 至少LEFT JOIN是很难取数据的,
    所以我很懒,直接在一个Data里写ini文件的文件内容.
    取data后当成是ini文件来读^
      

  3.   

    其实就是一个表里, 有一个字段是Data
    他的数据是这样的
    name1=xx
    name2=xx2
    name3=xx\nxx4\\xx
    取得数据后,就根据Data的内容来取得这些name1,name2,nam3了 \n会被替换为换行, \\会被替换为\
      

  4.   

    MyTextBox.ID = DataS.Tables[0].Rows[0][6].ToString();
    所以你6里有值么?
      

  5.   

    有值,这个就是我所要获取的TextBox文本框的值。该值是在数据表中定义的一个列。
      

  6.   

    可以考虑下JS+Html控件去实现。告别服务控件。
    例如:switch (tablename)
                                    {
                                        case "BrowserDate":  //日期控件
                                            if (textvalue.Attributes["RelateControlID"] != null)
                                            {
                                                string RelateControlID = textvalue.Attributes["RelateControlID"].Value;
                                                textvalue.Attributes.Add("onclick", "SelectDateTime('" + RelateControlID + "')");// 添加点击事件                                        }
                                            break;
                                        case "BrowserForm":   //弹出树菜单
                                            if (textvalue.Attributes["RelateControlID"] != null)
                                            {
                                                string RelateControlID = textvalue.Attributes["RelateControlID"].Value;
                                                textvalue.Attributes.Add("onclick", "SelectTreeNode('" + RelateControlID + "')");// 添加点击事件                                        }
                                            break;
                                        case "Return":  //返回上一页
                                            if (textvalue.Attributes["RelateControlID"] != null)
                                            {
                                                string RelateControlID = textvalue.Attributes["RelateControlID"].Value;
                                                textvalue.Attributes.Add("onclick", "javascript:history.go(-1);");// 添加点击事件                                        }
                                            break;
                                        case "InsertRecord":  //插入
                                            //杜增加频率 
                                            string pinlv = "";
                                            try
                                            {
                                                pinlv = textvalue.Attributes["reportfrequency"].Value;
                                            }
                                            catch
                                            {
                                                pinlv = "day";
                                            }
                                            textvalue.Attributes.Add("onclick", "__doPostBack_Ex('" + textvalue.Id + "','InsertRecord_" + pinlv + "')");// 添加点击事件
                                            //}
                                            break;
                                        default:
                                            break;
                                    }
      

  7.   

    打错力道了这类东西,应该着眼点应该是一些通行的描述标准比如IBM的xform,微软的xaml,然后根据xml描述,使用T4模版引擎,自动生成对应页面,数据sql,后端处理逻辑不要以为xform只有java可以用,xaml只有SL,wpf可以用。他们都只是一个标准化的xml版form描述定义。根据这些统一描述定义,T4模版引擎是完全有能力去自动生成代码的ps:net4的dynamicobject也是一条可以的手动,msdn本身就有一个章节就是讲,如何动态定义对象,如何使用xml保存这个对象,如何通过xml描述动态生成动态对象