我可以在 XtraGrid 上只为一行设置行单元格值吗?

Posted

技术标签:

【中文标题】我可以在 XtraGrid 上只为一行设置行单元格值吗?【英文标题】:Can I make row cell value readOnly on XtraGrid just for one row? 【发布时间】:2012-12-10 06:24:06 【问题描述】:

如何在 XtraGrid 上将特定的行单元格设为只读(不可编辑)?例如,仅针对 row[0] 而不是所有行。

【问题讨论】:

【参考方案1】:

您可以使用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;

【讨论】:

优秀的答案,我一直在努力寻找一种好方法来做到这一点,这比我承认的要长! :-)【参考方案2】:

您可以使用ColumnView.ShownEditor 事件:

void gridView1_ShownEditor(object sender, EventArgs e)

    ColumnView view = (ColumnView)sender;        

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

【讨论】:

【参考方案3】:

来源: 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 事件并通过必要的 存储库项到 e.RepositoryItem 参数根据 具体情况。请参阅Assigning Editors to Individual Cells 帮助主题了解更多信息。

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 cellsHow to make my grid columns read-only

【讨论】:

以上是关于我可以在 XtraGrid 上只为一行设置行单元格值吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DevExpress XtraGrid 中获得单击的单元格列

DevExpress XtraGrid如何使单元格只读?

XtraGrid Suite - 有没有办法向单元格添加按钮或超链接?

如何获取 DevExpress XtraGrid 的选定行值?

EXCEL怎么按设定条件变色

有谁用过DevExpress.Xtragrid中的GridControl控件的,麻烦高手们告诉我怎么样做