C#界面控件数据绑定

这个代码片段展示了如何在C#中实现控件与实体类的自动数据绑定。通过`DataBind`方法,可以将窗体上的控件(如TextBox、CheckBox等)直接与实体类的属性对应,实现数据展示和更新。提供了两种数据绑定模式,一种是常规的双向绑定,另一种是只读绑定。此外,还包含了获取窗体所有控件的辅助方法。
摘要由CSDN通过智能技术生成
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;

namespace AOI
{
    /// <summary>
    /// 控件绑定数据源
    /// </summary>
    class MyControlsDataBinding
    {
        /// <summary>
        /// 将界面控件绑定到实体类(控件名必须跟实体类的字段名相同)
        /// </summary>
        /// <param name="myparams">实体类</param>
        /// <param name="f">窗体</param>
        ///  <param name="dsup">数据绑定模式</param>
        public void DataBind(object myparams, Control f, DataSourceUpdateMode dsup)
        {
            Type type = myparams.GetType();
            PropertyInfo[] infos = type.GetProperties();
            allcontrols.Clear();
            Control[] fcontrols = GetAllControls(f);
            foreach (Control item in fcontrols)
            {
                foreach (PropertyInfo info in infos)
                {
                    if (item.Name == info.Name)
                    {
                        string controlproperty = PropertyFromControl(item);
                        item.DataBindings.Add(controlproperty, myparams, info.Name,true, dsup);
                    }
                }
            }
        }
        /// <summary>
        /// 绑定翻译类使用
        /// </summary>
        /// <param name="myparams"></param>
        /// <param name="f"></param>
        public void DataBind(object myparams, Control f)
        {
            Type type = myparams.GetType();
            PropertyInfo[] infos = type.GetProperties();
            allcontrols.Clear();
            Control[] fcontrols = GetAllControls(f);
            foreach (Control item in fcontrols)
            {
                foreach (PropertyInfo info in infos)
                {
                    if (item.Name == info.Name)
                    {
                        string controlproperty = PropertyFromControls(item);
                        item.DataBindings.Add(controlproperty, myparams, info.Name, false, DataSourceUpdateMode.Never);
                    }
                }
            }
        }
        /// <summary>
        /// 获取的控件列表
        /// </summary>
        public List<Control> allcontrols = new List<Control>();
        /// <summary>
        /// 获取指定控件(窗体)内所有控件
        /// </summary>
        /// <param name="f">指定控件(窗体)</param>
        /// <returns></returns>
        private Control[] GetAllControls(Control f)
        {
            foreach (Control item in f.Controls)
            {
                allcontrols.Add(item);
                if (item.Controls != null)
                {
                    GetAllControls(item);
                }
            }
            return allcontrols.ToArray();
        }
        /// <summary>
        /// 获取指定控件的指定属性
        /// </summary>
        /// <param name="control">指定控件</param>
        /// <returns></returns>
        public string PropertyFromControl(Control control)
        {
            string requestProperty = "Text";
            if (control is TextBox || control is Label)
            {
                requestProperty = "Text";
            }
            else if (control is CheckBox)
            {
                requestProperty = "Checked";
            }
            else if (control is NumericUpDown)
            {
                requestProperty = "Value";
            }
            else if (control is ComboBox)
            {
                requestProperty = "Text";
            }
            return requestProperty;
        }
        public string PropertyFromControls(Control control)
        {
            string requestProperty = "Text";
            if (control is TextBox || control is Label || control is CheckBox || control is GroupBox|| control is TreeView)
            {
                requestProperty = "Text";
            }
            else if (control is ComboBox)
            {
                requestProperty = "DataSource";
            }
            else if (control is DataGridView)
            {
                requestProperty = "DataSource";
            }

            return requestProperty;

        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值