Devexpress C#XtraGrid单细胞编辑问题

时间:2011-09-30 20:36:08

标签: c# devexpress

我准备把头发拉出去,这可能很简单。

这是使用XtraGrid。

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

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

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

有人可以带我完成我需要做的事情才能完成这项工作吗?我需要为此列的readonly / allowedit属性设置什么设置?我需要在那些DisplayEditor / CustomRowCellEdit方法中执行此操作?我真的很陌生,所以这可能是一个非常基本的问题,但我需要一些帮助! C#的一些代码示例用于确定选择哪个单元格对我有帮助,但我只需要弄清楚这一点。感谢!!!

1 个答案:

答案 0 :(得分:2)

是的,你是对的,你必须通过实施ShowingEditor事件

来解决这个问题

演示porpuses的代码:

首先我将gridview1绑定到RandomClass

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

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

然后实施ShowingEditor事件,每当gridview1尝试打开second column的编辑器时,它会检查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;
     }
 }