我觉得改变数据库表结构的设计不是很好。如果我设计,我就这样来,设计两个表:Students表放学生基本信息,再来一个子表StudentInfos放之后需要灵活扩展的数据,内容可能像下面这样:
id | studentId | infoname | infovalue | valueType | range |
---|---|---|---|---|---|
1 | 1 | birthday | 2020-3-3 | time | |
2 | 1 | gender | 男 | enum | 男,女 |
如果需要增加或减少学生实体的属性,就在这个表里增加或删除一行,不用改变表结构。至于UI上,可以读取这个表,然后根据这个表的内容生成控件,可能如下:
var infos = student.Infos;
foreach(var info in infos)
{
AddControl(info);
}
AddControl(Info info)
{
if(info.vuletype = "enum")
{
RadioButton rb = new RadioButton();
form.Controlls.Add(rb);
}
else if(info.valuetype == "text")
{
Label label = new Label();
form.Controlls.Add(lable);
}
// todo more
}
谢谢回复。
大概看明白了,确实很厉害,比直接改变数据库表结构要复杂得多。
但是按您的做法我添加完出生年月的字段,我要查所有学生的信息sql语句怎么写
UI显示上,根据这个表的内容生成控件,这块我不太会,动态创建控件。用foreach?
按照我原来的思路直接改变数据库表结构,添加完字段,直接查学生表的列名和数据类型来判断再创建对应控件这样可以吗
@塔比特:
问:但是按您的做法我添加完出生年月的字段,我要查所有学生的信息sql语句怎么写
答:select * from infos where studentid = 1
问:UI显示上,根据这个表的内容生成控件,这块我不太会,动态创建控件。用foreach?
答:是的
问:按照我原来的思路直接改变数据库表结构,添加完字段,直接查学生表的列名和数据类型来判断再创建对应控件这样可以吗
答:也可以啊,只是我觉得在程序运行的过程中还要改变数据库表结构,如果数据多了,会不会出现问题?
@会长: 这只是查了studentId=1学生吧,还有studentId=2,3,4
我这个只是小程序,业务流程不是很复杂,您的设计确实好,我在想着怎么省事,嘿嘿
@塔比特: 好的,只是个参考。
@会长: 您那个表查所以学生信息sql咋写,studentid = 1,只是查了一个学生的吧
还有studentid = 2,3,4
哪里不成功,有什么错误
不成功就是我做不出来,思路根本就不对
创建“出生年月”字段后,在添加和修改窗体页面得创建控件这儿卡住了,没思路
建议将报错信息给贴出来
没报错,我意思就是我做不出来