日期:2014-05-18  浏览次数:20846 次

DataGridViewComboBoxColumn的数据源问题,很难,或许我没有想好思路,请帮我看看,谢谢了!
我有一个DataGridView,我打算绑定DataGridViewComboBoxColumn列,这一列在数据库中部分有值(DataGridview数据源),目前是这样的情况:当我绑定DataTable作为数据源时候,只要一运行就会出现"System.ArgumentException: DataGridviewCoboBoxCell 值无效。要替换此默认对话框,请处理 DataError 事件。"我想应该是Items的类型(DataRowView好像)和数据库的类型不匹配的原因,改为将数据源的信息一个一个添加进Items是可以的,也可以显示出来已经存在的值,一切都很正常,但是,这不是我想要的,如何将DataTable绑定到DataGridViewComboBoxColumn数据源上,并且加载DataGridView的时候也会显示出来默认值呢?想了很久没想出来,请大家帮想想,谢谢了~!
DataGridViewComboBoxColumn comcol = new DataGridViewComboBoxColumn ();


------解决方案--------------------
你指定DataGridViewComboBoxColumn的数据源了吗?
该数据源可以用类似"select distinct mycolumn from mytable"的语句来填充。

C# code

comcol.DataPropertyName = "...";                      // 绑定到DataTable的那个字段
comcol.DataSource = GetAllComboBoxValues();           // 所有可能的值,可以是一个List等(如果是Datatable,还要指定DisplayMember)

------解决方案--------------------
DataGridViewComboBoxColumn comcol = new DataGridViewComboBoxColumn();
comcol.DisplayMember = "TEXT";
comcol.ValueMember = "VALUE";
DataTable dt = new DataTable();
dt.Columns.Add( "TEXT" );
dt.Columns.Add( "VALUE" );

DataRow row = dt.NewRow();
row["TEXT"] = "1";
row["VALUE"] = "a";
dt.Rows.Add( row );

row = dt.NewRow();
row["TEXT"] = "2";
row["VALUE"] = "b";
dt.Rows.Add( row );

comcol.DataSource = dt;
dataGridView1.Columns.Add( comcol );
----------------------------------------------------
comcol.DataPropertyName是设置dataGridView1绑定表对应的列
------解决方案--------------------
comcol.DisplayMember = "TEXT";
comcol.ValueMember = "VALUE"; 
这两个是设置列里面下拉菜单对应此列数据源中的两列的
------解决方案--------------------
楼上的都对,给你一个最简单的方法加一个事件
private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
if (e.Context == DataGridViewDataErrorContexts.Commit)
{
MessageBox.Show("检查提交出错,你可能没有输入完全数据或者没有正确输入数据");
}
if (e.Context == DataGridViewDataErrorContexts.CurrentCellChange)
{
;
}
if (e.Context == DataGridViewDataErrorContexts.Parsing)
{
;
}
if (e.Context == DataGridViewDataErrorContexts.LeaveControl)
{
;
}

if ((e.Exception) is ConstraintException)
{
DataGridView view = (DataGridView)sender;
view.Rows[e.RowIndex].ErrorText = "违反输入约束出错";
view.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "违反输入约束出";

e.ThrowException = false;
}
}