DataGridView中有一列是ComboBox,DataGridView绑定一个datatable,ComboBox也绑定一个datatable。
在ComboBox的ComboBox_SelectedIndexChanged事件中改变DataGridView其他单元格的值的时候,报错,
报错信息是:设置DataSource属性后无法修改项集合!这个问题怎么解决?
另外在网上查到说绑定DataError事件,我绑定后不会报错了,变成死机了!我跟了程序,发现在不停的执行DataError事件,直接执行到死机!
在ComboBox的ComboBox_SelectedIndexChanged事件中改变DataGridView其他单元格的值的时候,报错,
报错信息是:设置DataSource属性后无法修改项集合!这个问题怎么解决?
另外在网上查到说绑定DataError事件,我绑定后不会报错了,变成死机了!我跟了程序,发现在不停的执行DataError事件,直接执行到死机!
DataGridView.DataSource=null;
DataGridView.DataSource=datatable;
同理,如果你的ComboBox要重新绑定值的话也照上面的写法写下试试。
我试一下!
Private Sub DataGridView1CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick, DataGridView1.CellEnter
Try
With Me.DataGridView1
’combobox绑定到第四列,当单击时,或键盘移入时显示并赋值
If e.ColumnIndex = 4 Then
Me.ComboBoxProductType.Left = .GetCellDisplayRectangle(4, e.RowIndex, True).Left + 6
Me.ComboBoxProductType.Top = .GetCellDisplayRectangle(4, e.RowIndex, True).Top + 11
Me.ComboBoxProductType.Width = .GetCellDisplayRectangle(4, e.RowIndex, True).Width
.Rows(e.RowIndex).Cells(4).Value = Me.ComboBoxProductType.Text.Trim
Me.ComboBoxProductType.Visible = True
Else
Me.ComboBoxProductType.Visible = False
End If
End With
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
这样可以很好的实现用Combobox给Datagridview单元格赋值的效果。仅供参考,希望对你有所帮助!
private void // ERROR: Handles clauses are not supported in C# DataGridView1CellClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
try {
{
//combobox绑定到第四列,当单击时,或键盘移入时显示并赋值
if (e.ColumnIndex == 4) {
this.ComboBoxProductType.Left = this.DataGridView1.GetCellDisplayRectangle(4, e.RowIndex, true).Left + 6;
this.ComboBoxProductType.Top = this.DataGridView1.GetCellDisplayRectangle(4, e.RowIndex, true).Top + 11;
this.ComboBoxProductType.Width = this.DataGridView1.GetCellDisplayRectangle(4, e.RowIndex, true).Width;
this.DataGridView1.Rows(e.RowIndex).Cells(4).Value = this.ComboBoxProductType.Text.Trim;
this.ComboBoxProductType.Visible = true;
}
else {
this.ComboBoxProductType.Visible = false;
}
}
}
catch (Exception ex) {
Interaction.MsgBox(ex.ToString);
}
}
void cboState_SelectedIndexChanged(object sender, EventArgs e)
{
dgvInfo.CurrentCell.Value = cboState.Text; dgvInfo.CommitEdit((DataGridViewDataErrorContexts)123);
dgvInfo.BindingContext[dgvInfo.DataSource].EndCurrentEdit();
dgvInfo_CellEndEdit(null, null);
}我用了ComBox后,排序后再更改值,会出错。
很多奇怪的事情!
DataGridViewComboBoxColumn Fparmrangedesc = new DataGridViewComboBoxColumn();
Fparmrangedesc.DataPropertyName = "Fparmrangecoding";//设置数据源属性的名称
Fparmrangedesc.HeaderText = "参数值域";//列头显示的汉字
Fparmrangedesc.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
Fparmrangedesc.DataSource = dtReportParmRangeT;//ComboBox绑定的数据源
Fparmrangedesc.DisplayMember = "Fparmrangedesc";//显示值
Fparmrangedesc.ValueMember = "Fparmrangecoding";//实际值
dgView.Columns.Add(Fparmrangedesc);
Fparmrangedesc.DataPropertyName = "Fparmrangecoding";//设置数据源属性的名称
这句注释掉,这个ComboBoxColumn就不显示值了,空白!
有下拉框,但是选择完以后又成空白了!
其中“Fparmrangecoding”应该是DataGridView.DataSource的Table的某一个列的名称,这个你应该知道吧?
另外为什么下面三句已经给Fparmrangedesc这个Column绑定了DataSource,还要再让这个Column显示DataGridView.DataSource里面的值呢,这是矛盾的。
Fparmrangedesc.DataSource = dtReportParmRangeT;//ComboBox绑定的数据源
Fparmrangedesc.DisplayMember = "Fparmrangedesc";//显示值
Fparmrangedesc.ValueMember = "Fparmrangecoding";//实际值
另外,你的ComboBox_selectIndexChanged是挂的DataGridView.EditingControl的事件对吧,这一点我也觉得很奇怪。
我的ComboBox_selectIndexChanged里没有挂DataGridView.EditingControl事件呀!
报错信息是:设置DataSource属性后无法修改项集合!”
可能是我理解了太差,你上面所说的“在ComboBox的ComboBox_SelectedIndexChanged事件中改变DataGridView其他单元格的值的时候”,这里的ComboBox指的是谁?DataGridViewComboBoxColumn有SelectedIndexChanged这样的事件吗?你修改DataGridView上面的单元格的值的Code是什么样子的?
因为我是做类似DataGridView这样的控件的,因此,我对你所说的需求比较感兴趣。
在DataGridView的某个ComboBoxCell当中选择一个值之后,在编辑状态的情况下不需要按Enter键,把选择的值更新到当前Row的其他一个TextBoxCell的值。是不是这个意思呢?
http://blog.csdn.net/hejialin666/archive/2009/12/19/5036871.aspx
datatable1.rows[e.RowIndex]["strName"] = "KKK";
就是当前行的strName字段的值给改变了,其中datatable1就是DataGridView绑定的数据源。