5

如何在 XtraGrid 上将特定的行单元格设为只读(不可编辑)?例如,仅适用于 row[0] 但并非所有行。

4

3 回答 3

8

您可以使用GridView.CustomRowCellEdit事件:

//...
var repositoryItemTextEditReadOnly = new DevExpress.XtraEditors.Repository.RepositoryItemTextEdit();
repositoryItemTextEditReadOnly.Name = "repositoryItemTextEditReadOnly";
repositoryItemTextEditReadOnly.ReadOnly = true;
//...
void gridView1_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e) {
    if(e.RowHandle == 0)
        e.RepositoryItem = repositoryItemTextEditReadOnly;
}
于 2012-12-24T07:05:03.307 回答
0

您可以使用ColumnView.ShownEditor事件:

void gridView1_ShownEditor(object sender, EventArgs e)
{
    ColumnView view = (ColumnView)sender;        

    view.ActiveEditor.Properties.ReadOnly = view.FocusedRowHandle == 0;
}
于 2014-04-07T06:31:36.923 回答
0

来源: 如何有条件地防止编辑单个网格单元

当您需要根据条件将网格单元格设为只读时,最好的方法是使用GridView的ShowingEditor事件, 并通过传递给事件的e.Cancel参数来阻止编辑。当需要防止编辑时,只需将其设置为 True。

// disable editing

private void gridView1_ShowingEditor(object sender, System.ComponentModel.CancelEventArgs e) {

    GridView view = sender as GridView; 
        e.Cancel = view.FocusedRowHandle == 0;
}

源代码 - 如何在 ButtonEdit 列中显示特定单元格的禁用按钮
另一种方法是按照@DmitryG 的建议分配一个只读存储库编辑器控件,并且有时当有一个包含按钮的列时,我也实现了这种方式。

在您的情况下,您应该创建两个 TextEdit 存储库项目。一个带有启用按钮,另一个带有禁用按钮。然后处理GridView.CustomRowCellEdit事件并根据特定条件将必要的存储库项传递给e.RepositoryItem参数。有关其他信息,请参阅为单个单元格分配编辑器帮助主题。

在此处输入图像描述

private void gridView1_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)  
{
    if (e.Column.Caption == "Any2")
    {
        if (e.RowHandle == 0)
            e.RepositoryItem = columnReadOnlyTextEdit;
        else
            e.RepositoryItem = columnTextEdit;    
    }
}

参考:
如何自定义网格单元的外观
如何使我的网格列只读

于 2015-09-08T14:07:49.807 回答