首页 新闻 会员 周边 捐助

关于winform给sqlite数据库某个表添加字段问题。

0
悬赏园豆:100 [已解决问题] 解决于 2020-03-31 14:50

比如说有个学生表,里面有姓名,性别,年龄等字段。winform做的增删改查功能和窗体页面都有,还有一个功能是可以给学生表增加字段。比如增加一个"出生年月"字段,那么增加完成学生表就多了一个"出生年月"字段,此时添加和修改学生信息的窗体页面是没有“出生年月”这一项供用户填写的,我想加一个比如说label控件和textBox控件,label控件是出生年月,textBox让用户录入数据。只要给学生表添加一个字段,就在添加和修改窗体页面增加相应的控件。

各位大神给个思路或者方法。

塔比特的主页 塔比特 | 初学一级 | 园豆:112
提问于:2020-03-30 16:55
< >
分享
最佳答案
1

我觉得改变数据库表结构的设计不是很好。如果我设计,我就这样来,设计两个表: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
}
收获园豆:100
会长 | 专家六级 |园豆:12461 | 2020-03-31 10:09

谢谢回复。
大概看明白了,确实很厉害,比直接改变数据库表结构要复杂得多。
但是按您的做法我添加完出生年月的字段,我要查所有学生的信息sql语句怎么写
UI显示上,根据这个表的内容生成控件,这块我不太会,动态创建控件。用foreach?
按照我原来的思路直接改变数据库表结构,添加完字段,直接查学生表的列名和数据类型来判断再创建对应控件这样可以吗

塔比特 | 园豆:112 (初学一级) | 2020-03-31 11:23

@塔比特:
问:但是按您的做法我添加完出生年月的字段,我要查所有学生的信息sql语句怎么写
答:select * from infos where studentid = 1


问:UI显示上,根据这个表的内容生成控件,这块我不太会,动态创建控件。用foreach?
答:是的


问:按照我原来的思路直接改变数据库表结构,添加完字段,直接查学生表的列名和数据类型来判断再创建对应控件这样可以吗
答:也可以啊,只是我觉得在程序运行的过程中还要改变数据库表结构,如果数据多了,会不会出现问题?

会长 | 园豆:12461 (专家六级) | 2020-03-31 11:27

@会长: 这只是查了studentId=1学生吧,还有studentId=2,3,4

我这个只是小程序,业务流程不是很复杂,您的设计确实好,我在想着怎么省事,嘿嘿

塔比特 | 园豆:112 (初学一级) | 2020-03-31 11:37

@塔比特: 好的,只是个参考。

会长 | 园豆:12461 (专家六级) | 2020-03-31 12:01

@会长: 您那个表查所以学生信息sql咋写,studentid = 1,只是查了一个学生的吧

还有studentid = 2,3,4

塔比特 | 园豆:112 (初学一级) | 2020-03-31 14:49
其他回答(2)
0

哪里不成功,有什么错误

ifz | 园豆:302 (菜鸟二级) | 2020-03-30 17:50

不成功就是我做不出来,思路根本就不对

创建“出生年月”字段后,在添加和修改窗体页面得创建控件这儿卡住了,没思路

支持(0) 反对(0) 塔比特 | 园豆:112 (初学一级) | 2020-03-31 09:29
0

建议将报错信息给贴出来

初夏的阳光丶 | 园豆:641 (小虾三级) | 2020-03-30 21:03

没报错,我意思就是我做不出来

支持(0) 反对(0) 塔比特 | 园豆:112 (初学一级) | 2020-03-31 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册