我有一个类对象
TContact = class(TObject)
private
FChild: TContact;
FLastname: string;
FFirstname: string;
FAge: Integer;
procedure SetFirstname(const Value: string);
procedure SetLastname(const Value: string);
public
constructor Create(AFirstname: string = ''; ALastname: string = ''; AChild :
TContact = nil; AAge : Integer = 10);
property Child: TContact read FChild write FChild;
property Firstname: string read FFirstname write SetFirstname;
property Lastname: string read FLastname write SetLastname;
property Age: Integer read FAge write FAge;
end;
我想在TcxGridTableView中显示一些对象。这是我在TcxGridTableView上显示一些对象的代码
var
lFather: TContact;
list: IList<TObject>;
lJon: TContact;
lMother: TContact;
begin
list := TObservableCollection<TObject>.Create();
lJon := TContact.Create('Jericho', 'Doe', TContact.Create('No Child'),8);
lFather := TContact.Create('John', 'Doe', lJon, 48);
lMother := TContact.Create('Nancy', 'More', lJon, 45 );
list.Add(lJon);
list.Add(lFather);
list.Add(lMother);
prescontactpresenter.View.ItemsSource := list.AsList;
end;
一切都运转良好。我可以修改FirstName和Lastname的值。但是当我直接在age列上修改Age属性值时,我收到以下错误:
但是当我将Age属性绑定到Tedit时,我可以修改它的值。有谁知道它是怎么回事?
答案 0 :(得分:0)
您需要设置该列的PropertiesClass(比如说TcxSpinEditProperties)。这可以在设置ItemsSource之后完成。否则,默认列属性是TextEdit,它将以字符串形式发送值,不会在绑定中自动转换为Integer。
另一种方法是关闭演示者中的UseColumnDefinitions
属性并自行创建所有列。
答案 1 :(得分:0)
我找到了解决方法。我修改了单位DSharp.DevExpress.PresenterDataSource
procedure TGridViewPresenterDataSource.SetValue(
ARecordHandle: TcxDataRecordHandle; AItemHandle: TcxDataItemHandle;
const AValue: Variant);
var
LItemTemplate: IDataTemplate;
begin
LItemTemplate := FPresenter.GetItemTemplate(ARecordHandle);
// remarked bagus BP
//LItemTemplate.SetText(ARecordHandle, Integer(AItemHandle), VarToStrDef(AValue, ''));
LItemTemplate.SetValue(ARecordHandle, Integer(AItemHandle), TValue.FromVariant(AValue));
end;
我尝试使用String,Integer,Float和DateType数据类型,结果没问题