C#由数据库表动态生成编辑显示控件(Sql Server数据库)

勇哥的一个案子里面用到这个功能。

因为考虑到数据库的表字段没有定形,经常需要修改。如果使用手工拖放TextBox的方案与字段对应的话,程序经常需要改变。

因此最好是由数据库表的字段,动态生成TextBox进行显示与编辑,就像下图程序界面这样。


image.png


首先,我们列出表结构,获取全部字段。

然后new出textbox控件,add进控件flowLayoutPanel,这个控件是其它控件的容器,内容过多时自带滚动条。

怎么获取sql server中表的结构呢,请看勇哥另一个贴子:

Sql Server 2008R2查看表结构


实现比较简单,代码如下,请各位参考。如果有函数找不原型可以找勇哥索要。

另外,那个臃肿的case是勇哥偷了个懒,这些read系列的函数原本应该有个父类,不至于在这里这么重复书写以至污了各位的法眼,抱歉各位。


using algx.coslightx.fmsx.appx;
using MSSQL;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public struct tabFielesObj
        {
            public int index;
            //字段的名字,也是控件的名字
            public string textName;
            public FieldSet_TextBox textObj;
            //字段数据类型
            public string dataType;    
            public string fieldValue;
        }
        public List<tabFielesObj> tObj = new List<tabFielesObj>();
        string[] tabNameAry = new string[]
        {
            "B线OCV",
            "B线PPG尺寸测量",
            "B线tco焊机",
            "C线tco焊机",
            "B线边电压",
            "B线三封机",
            "D线分档机",
            "美纹胶",
            "喷码机",
            "切极耳",
            "撕膜机",
            "高温胶机",
            "正压测漏"
        };
        public SQLServerClient sql = new SQLServerClient();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = listBox1.SelectedIndex;
            if(index>=0)
            {
                tObj.Clear();
                createFieldObj(tabNameAry[index]);
            }
            
        }

        private  void btnSubmit_Click(object sender, EventArgs e)
        {
            if (!Init())
            {
                MessageBox.Show("登陆失败!");
                return;
            }
            listBox1.Items.Clear();
            listBox1.Items.AddRange(tabNameAry);

        }

        private void createFieldObj(string tabName)
        {
            var ary1 = sql.read读表结构(tabName);
            flowLayoutPanel1.Controls.Clear();
            int js1 = 0;
            foreach (var m in ary1)
            {
                var obj = new FieldSet_TextBox()
                {
                    caption = m.Item1,
                    Name = m.Item1,
                    txtWidth = 135
                };
                flowLayoutPanel1.Controls.Add(obj);
                tObj.Add(new tabFielesObj()
                {
                    index = js1,
                    textName = m.Item1,
                    dataType = m.Item2,
                    fieldValue = "",
                    textObj = obj
                });
                ++js1;
            }
            updateTextValue();
        }

        private void updateTextValue()
        {
            switch (listBox1.SelectedIndex)
            {
                case 0:
                    var v = sql.readOCV(tbxCurBattery.Text);
                    if (null == v) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 1:
                    var v1 = sql.readPPG(tbxCurBattery.Text);
                    if (null == v1) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v1);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 2:
                    var v2 = sql.read焊机(tbxCurBattery.Text);
                    if (null == v2) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v2);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 3:
                    var v3 = sql.readtco焊机(tbxCurBattery.Text);
                    if (null == v3) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v3);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 4:
                    var v4 = sql.read边电压(tbxCurBattery.Text);
                    if (null == v4) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v4);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 5:
                    var v5 = sql.read封机(tbxCurBattery.Text);
                    if (null == v5) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v5);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 6:
                    var v6 = sql.read分档(tbxCurBattery.Text);
                    if (null == v6) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v6);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 7:
                    var v7 = sql.read美胶(tbxCurBattery.Text);
                    if (null == v7) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v7);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 8:
                    var v8 = sql.read喷码机(tbxCurBattery.Text);
                    if (null == v8) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v8);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 9:
                    var v9 = sql.read切极耳(tbxCurBattery.Text);
                    if (null == v9) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v9);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 10:
                    var v10 = sql.read切(tbxCurBattery.Text);
                    if (null == v10) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v10);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 11:
                    var v11 = sql.read撕膜(tbxCurBattery.Text);
                    if (null == v11) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v11);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 12:
                    var v12 = sql.read贴胶机(tbxCurBattery.Text);
                    if (null == v12) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v12);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
                case 13:
                    var v13 = sql.read测漏(tbxCurBattery.Text);
                    if (null == v13) return;
                    for (int i = 0; i < tObj.Count; i++)
                    {
                        var fvalue = GetModelValue(tObj[i].textName, v13);

                        tObj[i] = new tabFielesObj()
                        {
                            index = i,
                            textName = tObj[i].textName,
                            dataType = tObj[i].dataType,
                            fieldValue = fvalue,
                            textObj = tObj[i].textObj
                        };
                        tObj[i].textObj.text = tObj[i].fieldValue;
                    }
                    break;
            }

        }



        private bool Init()
        {
            var conn = string.Format("Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID={2};Password={3}",
              tbxServerName.Text, "guangyu", tbxUser.Text, tbxPassword.Text);

            try
            {
                return sql.ConnectLib(conn);
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// <summary>
        /// 获取类中的属性值
        /// </summary>
        /// <param name="FieldName"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public string GetModelValue(string FieldName, object obj)
        {
            try
            {
                var Ts = obj.GetType();
                object o = Ts.GetProperty(FieldName).GetValue(obj, null);
                string Value = Convert.ToString(o);
                if (string.IsNullOrEmpty(Value)) return null;
                return Value;
            }
            catch
            {
                return null;
            }
        }
    }
}

--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864