我在XtraGrid中使用了2列。当Column1的值发生变化时,我想执行一些逻辑并可能更改Column2的值并禁用Column2。你可以在下面看到我的代码,但我有3个问题:
我已将以下事件添加到网格中:
this._myGridView.CustomRowCellEdit +=
new DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventHandler(
this.myGridView_CustomRowCellEdit);
这是事件:
private void myGridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
if (e.Column.FieldName == "Column1" && e.RowHandle >= 0)
{
GridView gv = sender as GridView;
string value1 = gv.GetRowCellValue(e.RowHandle, gv.Columns["Column1"]).ToString();
if (value1 == "something")
{
gv.SetRowCellValue(e.RowHandle, gv.Columns["Column2"], someOtherValue);
// I'd like to disable Column2 in this IF logic.
}
}
}
答案 0 :(得分:2)
在DevX文档中,有一条关于CustomRowCellEdit事件的说明
由于XtraGrid控件的基础结构,每次刷新单元格时,CustomRowCellEdit事件都会频繁触发。因此,不要为CustomRowCellEdit事件处理程序实现复杂的逻辑...
根据您声明的要求,我的方法是使用CellValueChanged事件而不是CustomRowCellEdit。然后你的处理程序可以说像
private void myGridView_CellValueChanged(object sender, CellValueChangedEventArgs e) {
if (e.Column.FieldName != "Column1") return;
GridView gv = sender as GridView;
if (e.Value == "something") {
gv.SetRowCellValue(e.RowHandle, gv.Columns["Column2"], someOtherValue);
}
}
要在运行时使单个单元格不可编辑,请在DevExpress支持网站上查看此主题。 how to set readyonly for rows at runtime using Devxpress Grid Contorl。 基本上你需要做的是处理网格视图的ShowingEditor事件,并使用FocusedRowHandle和FocusedColumn属性,决定是否允许编辑当前单元格。要禁用编辑,请将CancelEventArgs的Cancel属性设置为true。
希望这有帮助。