Vb.net Infragistics UltraGrid-禁用单个单元格

Vb.net Infragistics UltraGrid-禁用单个单元格,vb.net,infragistics,ultrawingrid,Vb.net,Infragistics,Ultrawingrid,我有一个订单系统,在订单屏幕上可以输入订单。为此,它使用一个UltraGrid,其中每一行都是一个订单。见下图 我知道,在某种程度上,可以使整行不可重写,这样单元格中的数据就无法编辑,数据就不能输入空单元格 但是,我需要所有的单元格都像这样运行,除了一个,直到这个单元格中有数据为止。(例如,除“产品代码”外的所有单元格都应禁用,然后在填写产品代码后可供编辑)。我需要什么代码来执行此操作 我尝试使用With语句将单元格单独设置为只读,但这似乎不起作用 编辑 我使用了下面的代码来禁用单个列的激活,

我有一个订单系统,在订单屏幕上可以输入订单。为此,它使用一个
UltraGrid
,其中每一行都是一个订单。见下图

我知道,在某种程度上,可以使整行不可重写,这样单元格中的数据就无法编辑,数据就不能输入空单元格

但是,我需要所有的单元格都像这样运行,除了一个,直到这个单元格中有数据为止。(例如,除“产品代码”外的所有单元格都应禁用,然后在填写产品代码后可供编辑)。我需要什么代码来执行此操作

我尝试使用
With
语句将单元格单独设置为
只读
,但这似乎不起作用

编辑

我使用了下面的代码来禁用单个列的激活,但是我收到了错误消息

对象引用未设置为对象的实例

有人能告诉我为什么吗

      If ugProducts.ActiveRow.Cells("Product_Code").Value <> "" Then
            ugProducts.DisplayLayout.Bands(0).Columns(1).CellActivation = Activation.Disabled
            ugProducts.DisplayLayout.Bands(0).Columns(2).CellActivation = Activation.Disabled
            ugProducts.DisplayLayout.Bands(0).Columns(3).CellActivation = Activation.Disabled
        Else
        End If
如果ugProducts.ActiveRow.Cells(“产品代码”).Value为“”,则
ugProducts.DisplayLayout.Bands(0).Columns(1).CellActivation=Activation.Disabled
ugProducts.DisplayLayout.Bands(0).Columns(2).CellActivation=Activation.Disabled
ugProducts.DisplayLayout.Bands(0).Columns(3).CellActivation=Activation.Disabled
其他的
如果结束

谢谢。

方法是正确的:CellActivation是正确的道具

但我认为问题在于当你设置

你不要谈论什么时候。 如果您想将单元格设置一次,请选择UGrid的初始化事件的正确“时刻”

初始值elayouteventargs
中,您将找到
.Layout
,使用它设置band-column.cell激活

相反,如果要控制特定行的特定单元格,则需要在
InitializeRow event
中处理此问题,并在eventarg中设置行中单元格的激活

如果用户编辑单元格值时需要控制激活,请在AfterExitEditMode事件中处理

私人建议,用C#代替VB。更加清晰、灵活、紧凑


Davide

您应该做的第一件事是将
更改为
=
,因为如果
产品代码中的值不为空,则当前将其设置为禁用。如果将
.ToString
添加到
.Value
的末尾,会发生什么情况?@David谢谢,这仍然会产生相同的错误,但至少现在作业是正确的。这里已经回答了这一问题,但还是要感谢您