关于DataGridViewComboBoxColumn的进阶绑定问题

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

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

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

///


/// 绑定DataGridViewComboBoxColumn
///

/// DataGridViewComboBoxColumn
///
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;
}
///
/// 枚举名和值转换到DataTable
///

/// 枚举实例
///
///
/// DataTable
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;
}

转载于:https://www.cnblogs.com/gghxh/archive/2007/02/25/655653.html

你可能感兴趣的:(关于DataGridViewComboBoxColumn的进阶绑定问题)