2011-09-30 531 views
2

我即将把我的头发拉出来,可能很简单。Devexpress C#XtraGrid单个单元格编辑问题

这是使用XtraGrid。

我们假设我有两列和x行,包含在一列中的只是一个checkbox,我用columnedit属性设置,另一列是一个值。我有一个文本框设置为第二个值的编辑器。

如何设置此项,以便如果选中该行的复选框,它将允许编辑其旁边的值字段中的数字?我将allowedit设置为true,对于复选框列,但是如果我将allowedit设置为true,对于第二列,比如checked checkedchanged事件处理程序的复选框,它将允许编辑该列中的所有单元格。我没有其他属性,比如readonly set或类似的东西。

如何区分该列中的单个单元格并激活编辑器,而基于同一行中的该复选框只读其他单元格?我有一种感觉,它涉及使用ShowingEditor和CustomRowCellEdit,但我不知道如何设置。

有人可以带我通过我需要做的事情来完成这件事吗?我需要为该列添加readonly/allowedit属性以及我需要在这些ShowingEditor/CustomRowCellEdit方法中执行此操作的设置?我真的很新,所以这可能是一个非常基本的问题,但我需要一些帮助!一些用于确定选择哪个单元格的代码示例可以帮助我,但我只需要弄清楚这一点。谢谢!!!

+0

采取行动时,它显示了根据第一列的值? – username

回答

2

是你的权利,你必须通过实现ShowingEditor事件管理这个

这对于演示代码porpuses:

首先我粘结gridview1RandomClass

public class RandomClass 
{ 
    public bool AllowEdit { get; set; } 
    public string Text { get; set; } 

    public randomClass() 
    { 
     this.AllowEdit = true; 
     Text = "Text1"; 
    } 
} 

然后执行ShowingEditor事件,每次gridview1试图打开的编辑器3210它检查AllowEdit列是否检查与否,您可以禁用第二列编辑器根据它

private void gridView1_ShowingEditor(object sender, CancelEventArgs e) 
{ 
    if (gridView1.FocusedColumn.FieldName == "Text" 
      && !IsAllowingEdit(gridView1, gridView1.FocusedRowHandle)) 
    { 
     e.Cancel = true; 
    } 
} 

private bool IsAllowingEdit(DevExpress.XtraGrid.Views.Grid.GridView view,int row) 
{ 
    try 
    { 
     bool val = Convert.ToBoolean(view.GetRowCellValue(row, "AllowEdit")); 
     return val; 
    } 
    catch 
    { 
     return false; 
    } 
} 
+0

几天后,但谢谢你的回应。我稍微修改了你的代码,并让它工作! –