困扰了好几天,求各位大神支持。DataGridViewComboBoxCell问题
小菜虫一只 2018-06-11 11:17:43 我有个datagrid绑定了数据库某个表的A,B,C字段的信息,我需要把其中一个列A作成下拉菜单。
A的值包含1,2,3. 对应的下拉菜单显示信息为“你”,“好”,“吗”.
使用现在的代码,下拉菜单添加成功。但是有一问题,初始化界面时,下拉菜单显示的是ValueMember ,而不是DisplayMember 。点击下拉菜单后,显示的是DisplayMember 。当光标移走点击别处时,又变回了ValueMember。查了两三天都没有查出来为什么。大家能不能帮帮我。谢谢
我在初始化时,为datagridView赋值后,增加了下面的代码。
_ctrlGridQ.gridView.RowsAdded += vRowsAdded;
//为下拉菜单赋值
private void vRowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
var getCell = new Func<int, string, DataGridViewCell>((rowIdx, cellName) =>
_ctrlGridQ.gridView.Rows[rowIdx].Cells[cellName]);
try
{
int rowIndex = e.RowIndex;
int rowCount = e.RowCount;
for (int i = rowIndex; i < rowIndex + rowCount; i++)
{
var rRow = _ctrlGridQ.gridView.Rows[i];
using (var A_Cell = getCell(i, "A") as DataGridViewComboBoxCell)
{
A_Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
A_Cell.DataSource = EnumToDataTable(typeof(A_Status));
A_Cell.DisplayMember = "Key";
A_Cell.ValueMember = "Value";
}
}
}
catch (GCUIException ex)
{
GCMessageBox.ShowBox(ex.Message, "error");
}
}
//将下拉菜单对应内容转为datatable
public static DataTable EnumToDataTable(Type A_Status)
{
string[] Names = Enum.GetNames(A_Status);
for (int i = 0; i < Names.Length; i++)
{
Names[i] = GCLngSupport.sGetString(Names[i]);
}
Array Values = Enum.GetValues(A_Status);
DataTable table = new DataTable();
table.Columns.Add("Key", System.Type.GetType("System.String"));
table.Columns.Add("Value", System.Type.GetType("System.Int32"));
table.Columns["Key"].Unique = true;
for (int i = 0; i < Values.Length; i++)
{
DataRow DR = table.NewRow();
DR["Key"] = Names[i];
DR["Value"] = (int) Values.GetValue(i);
table.Rows.Add(DR);
}
return table;
}
//A 对应下拉菜单内容定义
public enum A_Status
{
"你" = 1,
“好” = 2,
“吗” = 3,
}