|
现有一个自定义数据集,在运行中动态改变字段。代码如下
//清空数据集的字段
for I := TBizDataSet(UserDataset).UserFieldCount-1 downto 0 do
begin
TBizDataSet(UserDataset).UserFields[I].Free;
end;
//添加一个字段
lBizField := TUserDataField.Create(UserDataset); // 数据
lBizField.DataSet := UserDataset; // 指定字段所在的数据集
lBizField.ID := dataset1.FieldByName('MPID').AsString; // 设置字段ID
lBizField.DisplayName := dataset1.FieldByName('MPName').AsString; // 设置显示名称
lBizField.DataType := GetDataTypeByName(FieldByName('PDataType').AsString); // 设置字段类型
if SysUtils.SameText(FieldByName('PDataType').AsString,'dtString') then
begin
if FieldByName('PSize').AsInteger > 0 then
lBizField.Size := FieldByName('PSize').AsInteger;
end
else
lBizField.Size := FieldByName('PSize').AsInteger; // 设置字段大小
lBizField.EditStyleID := FieldByName('PEDITSTYLE').AsString;//设置字段表现类型
// 如果是浮点、数字型的,设置小数点
StrDataType := FieldByName('PDataType').AsString;
if SysUtils.SameText(StrDataType,'dtFloat') or SysUtils.SameText(StrDataType,'dtNumber') then
lBizField.Scale := FieldByName('PSCALE').AsInteger;
lBizField.IsPrimaryKey := FieldByName('IsPrimaryKey').AsBoolean; // 是否是关键字段
lBizField.IsRequired := FieldByName('IsRequired').AsBoolean; // 是否必须
lBizField.Alignment := GetAlignByName(FieldByName('PALIGNMENT').AsString); // 设置对齐方式
//自动填充
if not SysUtils.SameText(FieldByName('PAUTOFILL').AsString,'') then //自动填充
begin
lBizField.AutoFillDef.Enabled := True;
lBizField.AutoFillDef.Expression.Text := FieldByName('PAUTOFILL').AsString;
end;
//有效字符
lBizField.ValidChars := FieldByName('ValidChars').AsString;//有效输入字符
//显示格式
if not SysUtils.SameText(FieldByName('PDPFORMAT').AsString,'') then //显示格式
lBizField.DisplayFormat := FieldByName('PDPFORMAT').AsString;
//查找属性
if not SysUtils.SameText(FieldByName('PTEMPLET').AsString,'') then
begin
lBizFieldTemplet := TBizFieldTemplet.Create(nil);
try
lBizFieldTemplet.Templet.FileName := FieldByName('PTEMPLET').AsString;
if lBizFieldTemplet.LookupDef <> nil then
begin
lBizField.LookupDef.Assign(lBizFieldTemplet.LookupDef);
end;
finally
lBizFieldTemplet.Free;
end;
end;
这样写可以吗?为什么我在第一次添加的时候没问题,但是第二次先删除在添加一个新的字段的时候,当TBizDataSet(DataSetusdOther).open的时候仍然报第一次添加的一个字段不存在?
而且我调试的时候TBizDataSet(DataSetusdOther).fieldcount的值和UserDataset.userfieldcount的值为什么不一样呢 |
|