两个cxGrids:cxGridDBTableView1只适用于一个网格?
Two cxGrids: cxGridDBTableView1 applies only to one grid?
我的表单上有两个 cxgrid(cxGrid1 和 cxGrid2)。
两者都有 NewItemRow.Visible.
现在,我想从 cxGrid2 中删除 NewItemRow。
打电话:
cxGridDBTableView1.NewItemRow.Visible:=False;
从 cxGrid1 而不是我想要的 (cxGrid2) 中删除 NewItemRow。
我如何将其应用于 cxGrid2?
从你的问题和你对读者评论的回复中可以看出,你的表单声明有问题。以通常方式(通过在组件面板上选择 cxGrid 并将其两个实例拖放到表单上)放置 cxGrids 的新创建的表单不会出现编译问题,也不会出现您描述的异常行为。试试看,你就会明白我的意思了。
下面是一个项目的代码和 .DFM 摘录,该项目有两个 TcxGrid,其中一个带有可见的
NewItemRow,一个没有。此示例项目适用于使用 cxGrid v.15 的 D7,它是
支持 D7 的最高版本号。我已经在 D7 中完成了,因为你没有说明你使用的 Delphi 版本。
我特意在代码中设置了尽可能多的组件属性等,所以你
可以看到发生了什么以及它是如何完成的。
如果你尝试一下,你会发现它编译没有你提到的错误信息
在您的评论之一中,并按预期行事。因此我只能假设有一些
您的代码中组件 and/or 的命名或声明错误,我们的读者无法在您的 q 中看到。
我建议您解决问题的最佳方法是从一个空白表单开始,然后将 2 个 cxGrids 放到上面。保存并查看生成的 DFM,并向自己确认 2cxGrids 及其子组件(cxGridDBTableView 和 cxGridLevel)的名称是否正确和,然后在该 DFM 和您的项目的 DFM 之间进行 DIFF确定它们的分歧所在。
type
TForm1 = class(TForm)
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
cxGrid2DBTableView1: TcxGridDBTableView;
cxGrid2Level1: TcxGridLevel;
cxGrid2: TcxGrid;
CDS1: TClientDataSet;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
DBNavigator2: TDBNavigator;
DBGrid1: TDBGrid;
CDS1ID: TIntegerField;
CDS1Name: TStringField;
procedure FormCreate(Sender: TObject);
private
public
end;
[...]
procedure TForm1.FormCreate(Sender: TObject);
var
Field : TField;
begin
Field := TIntegerField.Create(Self);
Field.FieldName := 'ID';
Field.FieldKind := fkData;
Field.DataSet := CDS1;
Field := TStringField.Create(Self);
Field.FieldName := 'Name';
Field.Size := 20;
Field.FieldKind := fkData;
Field.DataSet := CDS1;
CDS1.CreateDataSet;
CDS1.InsertRecord([1, 'One']);
DBNavigator1.DataSource := DataSource1;
DBNavigator2.DataSource := DataSource1;
cxGrid1DBTableView1.DataController.DataSource := DataSource1;
cxGrid2DBTableView1.DataController.DataSource := DataSource1;
// The following creates default columns for the grids
cxGrid1DBTableView1.DataController.CreateAllItems;
cxGrid2DBTableView1.DataController.CreateAllItems;
cxGrid1DBTableView1.NewItemRow.Visible:= True;
cxGrid2DBTableView1.NewItemRow.Visible:= False;
end;
DFM 提取
object Form1: TForm1
[...]
object cxGrid1: TcxGrid
Left = 24
Top = 16
Width = 250
Height = 200
TabOrder = 0
object cxGrid1DBTableView1: TcxGridDBTableView
Navigator.Buttons.CustomButtons = <>
DataController.DataSource = DataSource1
DataController.KeyFieldNames = 'ID'
DataController.Summary.DefaultGroupSummaryItems = <>
DataController.Summary.FooterSummaryItems = <>
DataController.Summary.SummaryGroups = <>
end
object cxGrid1Level1: TcxGridLevel
GridView = cxGrid1DBTableView1
end
end
object cxGrid2: TcxGrid
Left = 32
Top = 280
Width = 250
Height = 200
TabOrder = 1
object cxGrid2DBTableView1: TcxGridDBTableView
Navigator.Buttons.CustomButtons = <>
DataController.DataSource = DataSource1
DataController.KeyFieldNames = 'ID'
DataController.Summary.DefaultGroupSummaryItems = <>
DataController.Summary.FooterSummaryItems = <>
DataController.Summary.SummaryGroups = <>
end
object cxGrid2Level1: TcxGridLevel
GridView = cxGrid2DBTableView1
end
end
object DBNavigator1: TDBNavigator
Left = 40
Top = 232
Width = 240
Height = 25
TabOrder = 2
end
object DBNavigator2: TDBNavigator
Left = 40
Top = 496
Width = 240
Height = 25
TabOrder = 3
end
object CDS1: TClientDataSet
Aggregates = <>
Params = <>
end
object DataSource1: TDataSource
DataSet = CDS1
end
我的表单上有两个 cxgrid(cxGrid1 和 cxGrid2)。 两者都有 NewItemRow.Visible.
现在,我想从 cxGrid2 中删除 NewItemRow。 打电话:
cxGridDBTableView1.NewItemRow.Visible:=False;
从 cxGrid1 而不是我想要的 (cxGrid2) 中删除 NewItemRow。 我如何将其应用于 cxGrid2?
从你的问题和你对读者评论的回复中可以看出,你的表单声明有问题。以通常方式(通过在组件面板上选择 cxGrid 并将其两个实例拖放到表单上)放置 cxGrids 的新创建的表单不会出现编译问题,也不会出现您描述的异常行为。试试看,你就会明白我的意思了。
下面是一个项目的代码和 .DFM 摘录,该项目有两个 TcxGrid,其中一个带有可见的 NewItemRow,一个没有。此示例项目适用于使用 cxGrid v.15 的 D7,它是 支持 D7 的最高版本号。我已经在 D7 中完成了,因为你没有说明你使用的 Delphi 版本。
我特意在代码中设置了尽可能多的组件属性等,所以你 可以看到发生了什么以及它是如何完成的。
如果你尝试一下,你会发现它编译没有你提到的错误信息 在您的评论之一中,并按预期行事。因此我只能假设有一些 您的代码中组件 and/or 的命名或声明错误,我们的读者无法在您的 q 中看到。
我建议您解决问题的最佳方法是从一个空白表单开始,然后将 2 个 cxGrids 放到上面。保存并查看生成的 DFM,并向自己确认 2cxGrids 及其子组件(cxGridDBTableView 和 cxGridLevel)的名称是否正确和,然后在该 DFM 和您的项目的 DFM 之间进行 DIFF确定它们的分歧所在。
type
TForm1 = class(TForm)
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
cxGrid2DBTableView1: TcxGridDBTableView;
cxGrid2Level1: TcxGridLevel;
cxGrid2: TcxGrid;
CDS1: TClientDataSet;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
DBNavigator2: TDBNavigator;
DBGrid1: TDBGrid;
CDS1ID: TIntegerField;
CDS1Name: TStringField;
procedure FormCreate(Sender: TObject);
private
public
end;
[...]
procedure TForm1.FormCreate(Sender: TObject);
var
Field : TField;
begin
Field := TIntegerField.Create(Self);
Field.FieldName := 'ID';
Field.FieldKind := fkData;
Field.DataSet := CDS1;
Field := TStringField.Create(Self);
Field.FieldName := 'Name';
Field.Size := 20;
Field.FieldKind := fkData;
Field.DataSet := CDS1;
CDS1.CreateDataSet;
CDS1.InsertRecord([1, 'One']);
DBNavigator1.DataSource := DataSource1;
DBNavigator2.DataSource := DataSource1;
cxGrid1DBTableView1.DataController.DataSource := DataSource1;
cxGrid2DBTableView1.DataController.DataSource := DataSource1;
// The following creates default columns for the grids
cxGrid1DBTableView1.DataController.CreateAllItems;
cxGrid2DBTableView1.DataController.CreateAllItems;
cxGrid1DBTableView1.NewItemRow.Visible:= True;
cxGrid2DBTableView1.NewItemRow.Visible:= False;
end;
DFM 提取
object Form1: TForm1
[...]
object cxGrid1: TcxGrid
Left = 24
Top = 16
Width = 250
Height = 200
TabOrder = 0
object cxGrid1DBTableView1: TcxGridDBTableView
Navigator.Buttons.CustomButtons = <>
DataController.DataSource = DataSource1
DataController.KeyFieldNames = 'ID'
DataController.Summary.DefaultGroupSummaryItems = <>
DataController.Summary.FooterSummaryItems = <>
DataController.Summary.SummaryGroups = <>
end
object cxGrid1Level1: TcxGridLevel
GridView = cxGrid1DBTableView1
end
end
object cxGrid2: TcxGrid
Left = 32
Top = 280
Width = 250
Height = 200
TabOrder = 1
object cxGrid2DBTableView1: TcxGridDBTableView
Navigator.Buttons.CustomButtons = <>
DataController.DataSource = DataSource1
DataController.KeyFieldNames = 'ID'
DataController.Summary.DefaultGroupSummaryItems = <>
DataController.Summary.FooterSummaryItems = <>
DataController.Summary.SummaryGroups = <>
end
object cxGrid2Level1: TcxGridLevel
GridView = cxGrid2DBTableView1
end
end
object DBNavigator1: TDBNavigator
Left = 40
Top = 232
Width = 240
Height = 25
TabOrder = 2
end
object DBNavigator2: TDBNavigator
Left = 40
Top = 496
Width = 240
Height = 25
TabOrder = 3
end
object CDS1: TClientDataSet
Aggregates = <>
Params = <>
end
object DataSource1: TDataSource
DataSet = CDS1
end