2012-01-11 343 views
0

我有一个带有一个GridView的XtraGrid,带有一个带有复选框存储库项目的列。现在我正在处理CellValueChanging事件,因为我想只允许用户根据同一行上其他列值的计算来检查或取消选中,因此我需要此事件的e.RowHandlee.Column,并且这无法在EditValueChanging存储库控制。在“DevExpress XtraGrid CellValueChanging”事件中设置相同单元格的值

现在我的计算表明用户不能检查特定的单元格,然后我会抛出一个消息框并尝试Me.BandedGridView1.SetRowCellValue(e.RowHandle, e.Column, False),但不幸的是,这不会将该单元格的值设置为false。

我需要在这里和这里做,只是因为基于其他列值的大量计算,我需要设置当前单元格的值,我正在处理的事件是正确的。

请帮助。

我使用的DevExpress 9.2(不升级的机会更高版本)

回答

1

你可能想阻止更新通过处理ShowingEditor事件。

class TestData 
{ 
    public TestData(string caption, bool check) 
    { 
     Caption = caption; 
     Check = check; 
    } 
    public string Caption { get; set; } 
    public bool Check { get; set; } 
} 

初始化一些测试数据:

BindingList<TestData> gridDataList = new BindingList<TestData>(); 
gridDataList.Add(new TestData("First row", true)); 
gridDataList.Add(new TestData("Second row", true)); 
gridControl.DataSource = gridDataList; 

手柄ShowingEditor。检查是否允许用户更改chechbox。如果不是,则取消该事件。

private void gridView1_ShowingEditor(object sender, CancelEventArgs e) 
    { 
     GridView view = sender as GridView; 
     // Decision to allow edit using view.FocusedRowHandle and view.FocusedColumn 
     if (view.FocusedColumn.FieldName == "Check") 
     { 
      // Allow edit of odd rows only 
      bool allowEdit = view.FocusedRowHandle % 2 == 1; 
      e.Cancel = !allowEdit; 
     } 
    } 
2

试试这个代码,它的工作完美!

private void GridView1_CellValueChanged(object sender, CellValueChangedEventArgs e) 
{ 
    if (e.Column.Caption != "yourColumnCaption") return; 
     GridView1.SetFocusedRowCellValue("yourColumnFieldName", 1); 
}