首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何才能使单元格仅在填充后才能读取?DataGridView C#

问如何才能使单元格仅在填充后才能读取?DataGridView C#
EN

Stack Overflow用户
提问于 2021-10-15 13:12:41
回答 1查看 64关注 0票数 0

我希望在DataGridView上显示一个包含多个列的表,所有列都只读,只有一列。这一列需要具有由用户填充的容量,但我希望将已有内容的单元格设置为ReadOnly,而不是所有列,这样用户仍有能力填充列上的其余单元格(已填充的单元格除外)

有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-15 16:32:53

您可以像这样简单地设置CellEndEdit事件:

代码语言:javascript
复制
private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCell cell =        this.DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex);
    cell.ReadOnly = true;
}

VB.NET:

代码语言:javascript
复制
Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    Dim cell As DataGridViewCell = Me.DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex)
    cell.ReadOnly = True
End Sub

如果开始时DataGridView中有数据,则可以在加载数据后设置访问权限,如下所示:

代码语言:javascript
复制
SetAccess(this.DataGridView1);

VB.NET:

代码语言:javascript
复制
Call SetAccess(Me.DataGridView1)

在你的类中...providing这个函数:

代码语言:javascript
复制
private void SetAccess(DataGridView dgw)
{
    for (var ir = 0; ir <= dgw.Rows.Count - 1; ir++)
    {
        for (var ic = 0; ic <= dgw.Columns.Count - 1; ic++)
        {
            DataGridViewCell cell = this.DataGridView1.Rows(ir).Cells(ic);
            if (!IsNothing(cell.Value) && cell.Value.ToString.Length > 0)
                cell.ReadOnly = true;
        }
    }
}

VB.NET:

代码语言:javascript
复制
Private Sub SetAccess(dgw As DataGridView)
    For ir = 0 To dgw.Rows.Count - 1
        For ic = 0 To dgw.Columns.Count - 1
            Dim cell As DataGridViewCell = Me.DataGridView1.Rows(ir).Cells(ic)
            If Not IsNothing(cell.Value) AndAlso cell.Value.ToString.Length > 0 Then
                cell.ReadOnly = True
            End If
        Next
    Next
End Sub

经过考验,所有的作品都是一种魅力。

显然,您可以使用代码,即通过修改列循环的范围来排除最后一列:

代码语言:javascript
复制
For ic = 0 To dgw.Columns.Count - 2

VB.NET (相同):

代码语言:javascript
复制
For ic = 0 To dgw.Columns.Count - 2

抱歉,第一次回复时错过了c#标签。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69585281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档