Kal*_*ona 22 .net c# datagridview winforms datagridviewcomboboxcell
我有DataGridView两个专栏.第一列是TextBoxCol(DataGridViewTextBoxColumn)第二列,第二列是ComboBoxCol(DataGridViewComboBoxColumn).
我怎样才能改变的值TextBoxCol时ComboBoxCol改变其选定的指标值?(这应该在选择的索引更改时发生ComboBoxCol.不是在离开列之后,如dataGridView_CellValueChanged)
我已经阅读了一个与我遇到的问题几乎相同的主题,但我不明白答案(根据复选标记应该是正确的).这是链接. - 几乎相同的主题
Sev*_*run 41
这个答案在几个地方浮动.使用DataGridViewEditingControlShowingEventHandler将触发比您想要的更多事件.在我的测试中,它多次触发了该事件.另外使用combo.SelectedIndexChanged - =事件不会真正删除事件,它们只是保持堆叠.无论如何,我找到了一个似乎有效的解决方案.我在下面包含一个代码示例:
// Add the events to listen for
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);
dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);
// This event handler manually raises the CellValueChanged event
// by calling the CommitEdit method.
void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
// This fires the cell value changed handler below
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
// My combobox column is the second one so I hard coded a 1, flavor to taste
DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells[1];
if (cb.Value != null)
{
// do stuff
dataGridView1.Invalidate();
}
}
Run Code Online (Sandbox Code Playgroud)
Kre*_*epN 31
给出这两个简单的方法(top方法中的'1'是组合框列的索引)
您将修改的行将是setter行cel.Value =,因为您可以将其更改为您喜欢的任何内容.
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex == 1 && e.Control is ComboBox)
{
ComboBox comboBox = e.Control as ComboBox;
comboBox.SelectedIndexChanged -= LastColumnComboSelectionChanged;
comboBox.SelectedIndexChanged += LastColumnComboSelectionChanged;
}
}
private void LastColumnComboSelectionChanged(object sender, EventArgs e)
{
var currentcell = dataGridView1.CurrentCellAddress;
var sendingCB = sender as DataGridViewComboBoxEditingControl;
DataGridViewTextBoxCell cel = (DataGridViewTextBoxCell)dataGridView1.Rows[currentcell.Y].Cells[0];
cel.Value = sendingCB.EditingControlFormattedValue.ToString();
}
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
46156 次 |
| 最近记录: |