• 关于DataGridViewComboBoxColumn的进阶绑定问题


    今天我开始上班了.先解决节前的一个遗留问题.

    我在DataGridView中有一DataGridViewComboBoxColumn,让此ComboBoxColumn绑定一个我自定义的枚举型(即显示"平行,下行,上行",值分别为0,1,2);但是在DataGridView绑定后并没有显示中文,而是抛出DataError异常,花了我一早上时间,最后发现,问题在要指定两个绑定的类型相同,才能在下拉列表中自动找到所指定的值,从而正确显示中文.晕,太浪费时间了

    public enum TemplateGoto
    {
    平行,下行,上行
    };

    /// <summary>
    /// 绑定DataGridViewComboBoxColumn
    /// </summary>
    /// <param name="dgvComboBox">DataGridViewComboBoxColumn</param>
    /// <param name="enumType"></param>
    public static DataTable DataBindDataGridViewComboBoxColumn(DataGridViewComboBoxColumn dgvComboBox, System.Type enumType)
    {
    DataTable source = Enum2DataTable(enumType, dgvComboBox.HeaderText, dgvComboBox.DataPropertyName);
    dgvComboBox.DataSource = source;
    dgvComboBox.DisplayMember = dgvComboBox.HeaderText;
    dgvComboBox.ValueMember = dgvComboBox.DataPropertyName;
    return source;
    }
    /// <summary>
    /// 枚举名和值转换到DataTable
    /// </summary>
    /// <param name="enumType">枚举实例</param>
    /// <param name="key">名</param>
    /// <param name="val">值</param>
    /// <returns>DataTable</returns>
    public static DataTable Enum2DataTable(Type enumType, string key, string val)
    {
    // 获取所有枚举的名称
    //string[] names = Enum.GetNames(enumType);
    // 获取所有枚举的值
    Array values = Enum.GetValues(enumType);
    DataTable dict = new DataTable();
    dict.Columns.Add(new DataColumn(key));
    dict.Columns.Add(new DataColumn(val));
    dict.Columns[val].Unique = true;
    dict.Columns[val].AllowDBNull = false;
    //如果这里不指定和DataGrid对应列相同的列类型就会抛出DataError异常
    dict.Columns[val].DataType = Type.GetType("System.Int16");
    for (int i = 0; i < values.Length; i++)
    {
    DataRow dr = dict.NewRow();
    dr[key] = values.GetValue(i);
    dr[val] = (System.Int16)((int)values.GetValue(i));
    dict.Rows.Add(dr);
    }
    return dict;
    }

  • 相关阅读:
    01快速入门-03-条件判断和循环
    01快速入门-02-数组和对象
    01快速入门-01-基本语法和数据类型
    《Head First 设计模式》[01] 策略模式
    爬山算法与模拟退火算法的分析与实现
    Java虚拟机(二) —— 运行时数据区的OOM异常
    CoreJava(一)—— Java迭代语句
    Java虚拟机(二) —— 垃圾回收算法与垃圾回收器
    算法学习 —— 使用Linux C++练习OJ
    Java虚拟机(一) —— 运行时数据区
  • 原文地址:https://www.cnblogs.com/gghxh/p/655653.html
Copyright © 2020-2023  润新知