datagridview在添加datasource绑定数据源的时候使用特殊数据类型

datagridvew绑定数据源的时候,我们经常会利用datagridview的特性,可以自动化的添加不通的列,但是只能支持bool类型和字符串类型。列只有DataGridViewTextBoxColumn和DataGridViewCheckBoxColumn列类型。这里我需要使用DataGridViewComboBoxColumn时无法处理。为解决此问题。详情看代码:

手动添加必须将AutoGenerateColumns设置为false

this.dataGridView2.AutoGenerateColumns = false;

 public class Test
 {
     /// <summary>
     /// 电压等级
     /// </summary>
     [DisplayName("电压等级")]
     public bool select { get; set; }
     /// <summary>
     /// 类型
     /// </summary>
     [DisplayName("类型")]
     public EnumTest type { get; set; }
     /// <summary>
     /// 描述
     /// </summary>
     [DisplayName("描述")]
     public string description { get; set; }
     /// <summary>
     /// 备注
     /// </summary>
     [DisplayName("备注")]
     public string remark { get; set; }
 }
 
 
     /// <summary>
    /// 测试枚举
    /// </summary>
    public enum EnumTest
    {
        /// <summary>
        /// 测试
        /// </summary>
        测试 = 1,
        /// <summary>
        /// 测试项
        /// </summary>
        测试项 = 2
    }

手动添加列

//info为数据集合
//List<Test> info = new List<Test>();

PropertyInfo[] pros = infos[0].GetType().GetProperties();
foreach (PropertyInfo item in pros)
{
    var info = item.GetCustomAttribute<DisplayNameAttribute>();
    var infoable = item.GetCustomAttribute<BrowsableAttribute>();
    string colName = info.DisplayName;
    if (infoable != null && !infoable.Browsable)
    {
        continue;
    }
    DataGridViewColumn dgvc = null;
    if (item.PropertyType.IsEnum)
    {
        //设置为枚举列
        dgvc = new DataGridViewComboBoxColumn();
        Dictionary<int, string> dic = SymTblHelp.EnumToDictionary(item.PropertyType);
        ((DataGridViewComboBoxColumn)dgvc).DataSource = Enum.GetValues(item.PropertyType);
        ((DataGridViewComboBoxColumn)dgvc).DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
        ((DataGridViewComboBoxColumn)dgvc).FlatStyle = FlatStyle.Flat;
    }
    else if (item.PropertyType == typeof(bool))
    {
        //bool类型
        dgvc = new DataGridViewCheckBoxColumn();
    }
    else
    {
        //常规类型
        dgvc = new DataGridViewTextBoxColumn();
        dgvc=new datagridchec
    }

    dgvc.Name = colName;
    dgvc.DataPropertyName = item.Name;// 保证该列的值绑定到DataTable中colName列上
    dgvc.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
    dgvc.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
    dataGridView2.Columns.Add(dgvc);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值