我可以在XtraGrid上只为一行创建行单元格值readOnly吗?

时间:2012-12-23 12:41:50

标签: c# winforms devexpress xtragrid

如何在XtraGrid上只读取(不可编辑)特定的行单元格?例如,仅用于行[0]而不是所有行。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您可以使用ColumnView.ShownEditor事件:

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

    view.ActiveEditor.Properties.ReadOnly = view.FocusedRowHandle == 0;
}

答案 2 :(得分:0)

来源: How to Conditionally Prevent Editing for Individual Grid Cells

  

当您需要根据条件将网格单元设为只读时,   最好的方法是使用 ShowingEditor 事件    GridView 并阻止通过传递给事件的 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;
}

来源 - How to display disabled buttons for particular cells within a ButtonEdit column
另一种方法是将一个只读的存储库编辑器控件分配为@DmitryG建议,并且当有一个包含按钮的列时,我也会实现这种方式。

  

在您的情况下,您应该创建两个TextEdit存储库项。一个用   启用按钮和另一个禁用按钮。然后处理   GridView.CustomRowCellEdit事件并传递必要的事件   根据a的存储库项目到 e.RepositoryItem 参数   具体情况。有关其他信息,请参阅Assigning Editors to Individual Cells帮助主题。

enter image description here

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

参考文献:
How to customize the Look-And-Feel of my grid cells
How to make my grid columns read-only