Within my Dataform i have a dropdown list which i bind to a IEnurable property on my ViewModel.
This woks just fine as untill now all i wanted was to get the ID of the item selected.
<
telerik:DataFormComboBoxField
DataMemberBinding
=
"{Binding OwlRecordTypeId,Mode=TwoWay}"
DisplayMemberPath
=
"Name"
SelectedValuePath
=
"Id"
ItemsSource
=
"{Binding Source={StaticResource OWL_VM}, Path=OwlRecordTypes}"
Label
=
"Record Type:"
/>
However it turnes out that now i need some more info from the Entity.
The entity has 3 fields ID, Code and Name.
As you can see above i put the name in the DisplayMemberPath and the id into the selectedvaluepath
To be able to see my "code" (the 3rd field) i would like to put teh whole object into the SelectedValuePath
I tried this:
SelectedValuePath="{Binding}"
But it did not work.
Any ideas on how i can do this?
12 Answers, 1 is accepted
Basically, the SelectedValuePath property should be set, not bound. Please take a look at our online documentation for further reference.
Let me know if you need any further assistance.
Maya
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>
This is exactly how i use it now.
As i explained above what i am trying to do it instead of setting the SelectedValuePath
to an ID, i would like to set it to the whole object, is that possible? and if so how would you do it?You may try to customize the data field by defining a RadComboBox inside and work with its SelectedItem and SelectedValue properties. This article illustrates a similar approach.
Maya
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>
This article illustrates how to customise the data fields.
But does not answer my question.
Again, i am looking for a way to pass the whole entity rather than an ID.
Has anyone else trying doing this?
I have prepared an example project you, trying to reproduce the scenario you have described. Please, refer to it and let me know whether this approach meets your requirements.
All the best,
Ivan Ivanov
the Telerik team
All i can see is that you do not use the DisplayMemberPath and the SelectedValuePath
So i changed my code as follows:
<
telerik:DataFormComboBoxField
DataMemberBinding
=
"{Binding OwlRecordType,Mode=TwoWay}"
ItemsSource
=
"{Binding Source={StaticResource OWL_VM}, Path=OwlRecordTypes}"
Label
=
"Record Type:"
/>
This displayed the items in my drop down box but as numbered objects.
I put back the DisplayMemberPath like this:
<
telerik:DataFormComboBoxField
DataMemberBinding
=
"{Binding OwlRecordType,Mode=TwoWay}"
DisplayMemberPath
=
"Name"
ItemsSource
=
"{Binding Source={StaticResource OWL_VM}, Path=OwlRecordTypes}"
Label
=
"Record Type:"
/>
This does load the items correctly, but does not save them.
The item is added to the list but my "_SubmittedChanges(object sender,..." does not run.
It's very strange.
I put a breakpoint there but nothing happens.
I change the code back to my original one and it all works again.
To avoid further misunderstandings, can you please paste the implementation of your data objects and a short description of the expected behavior. This will definitely help us adjust our example to your requirements.
Best wishes,
Pavel Pavlov
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>
Here is my metadata from the ria domain service generated file:
// The MetadataTypeAttribute identifies OwlRecordMetadata as the class
// that carries additional metadata for the OwlRecord class.
[MetadataTypeAttribute(
typeof
(OwlRecord.OwlRecordMetadata))]
public
partial
class
OwlRecord
{
// This class allows you to attach custom attributes to properties
// of the OwlRecord class.
//
// For example, the following marks the Xyz property as a
// required property and specifies the format for valid values:
// [Required]
// [RegularExpression("[A-Z][A-Za-z0-9]*")]
// [StringLength(32)]
// public string Xyz { get; set; }
internal
sealed
class
OwlRecordMetadata
{
// Metadata classes are not meant to be instantiated.
private
OwlRecordMetadata()
{
}
public
string
Description {
get
;
set
; }
public
int
Id {
get
;
set
; }
public
string
Notes {
get
;
set
; }
public
Organisation Organisation {
get
;
set
; }
public
int
OrganisationId {
get
;
set
; }
public
OwlBillingType OwlBillingType {
get
;
set
; }
public
int
OwlBillingTypeId {
get
;
set
; }
public
OwlRecordType OwlRecordType {
get
;
set
; }
public
int
OwlRecordTypeId {
get
;
set
; }
public
OwlStateType OwlStateType {
get
;
set
; }
public
int
OwlStateTypeId {
get
;
set
; }
public
OwlUnitType OwlUnitType {
get
;
set
; }
public
int
OwlUnitTypeId {
get
;
set
; }
public
string
Price {
get
;
set
; }
public
Nullable<
short
> TimeUnits {
get
;
set
; }
public
DateTime WorkDate {
get
;
set
; }
}
}
// The MetadataTypeAttribute identifies OwlRecordTypeMetadata as the class
// that carries additional metadata for the OwlRecordType class.
[MetadataTypeAttribute(
typeof
(OwlRecordType.OwlRecordTypeMetadata))]
public
partial
class
OwlRecordType
{
// This class allows you to attach custom attributes to properties
// of the OwlRecordType class.
//
// For example, the following marks the Xyz property as a
// required property and specifies the format for valid values:
// [Required]
// [RegularExpression("[A-Z][A-Za-z0-9]*")]
// [StringLength(32)]
// public string Xyz { get; set; }
internal
sealed
class
OwlRecordTypeMetadata
{
// Metadata classes are not meant to be instantiated.
private
OwlRecordTypeMetadata()
{
}
public
string
Code {
get
;
set
; }
public
Group Group {
get
;
set
; }
public
int
GroupId {
get
;
set
; }
public
int
Id {
get
;
set
; }
public
string
Name {
get
;
set
; }
[Include]
public
EntityCollection<OwlRecord> OwlRecords {
get
;
set
; }
}
}
This is only the relevant part of course.
I then have this im my viewmodel:
private
QueryableDomainServiceCollectionView<OwlRecord> _owlRecords;
public
IEnumerable OwlRecords
{
get
{
return
_owlRecords; }
}
public
IEnumerable OwlBillingTypes
{
get
{
return
_owlBillingTypes; }
}
private
QueryableDomainServiceCollectionView<OwlRecordType> _owlRecordTypes;
Right now i bind the owlRecordTypes to my drop down like this:
<
telerik:DataFormComboBoxField
DataMemberBinding
=
"{Binding OwlRecordTypeId,Mode=TwoWay}"
DisplayMemberPath
=
"Name"
SelectedValuePath
=
"Id"
ItemsSource
=
"{Binding Source={StaticResource OWL_VM}, Path=OwlRecordTypes}"
Label
=
"Record Type:"
/>
This is inside a grid bouind to a newRecord. This way inside the command that is bound to a button i do this:
OwlRecord myRecord =
new
OwlRecord();
myRecord.OwlStateTypeId = 1;
myRecord.OwlRecordTypeId = _newOwlRecord.OwlRecordTypeId;
_owlRecordsCurrent.AddNew(myRecord);
_owlRecordsCurrent.SubmitChanges();
But would like to be able to say:
if
( _newOwlRecord.OwlRecordType.Code =
"this"
)
myRecord.OwlRecordType = _newOwlRecord.OwlRecordType;
else
something
else
<telerik:DataFormComboBoxField DataMemberBinding=
"{Binding OwlRecordType,Mode=TwoWay}"
DisplayMemberPath=
"Name"
SelectedValuePath=
"???????"
ItemsSource=
"{Binding Source={StaticResource OWL_VM}, Path=OwlRecordTypes}"
Label=
"Record Type:"
/>
I am attaching a sample app with the suggested setup. It uses stripped versions of your data objects , with the relevant properties only.
Kind regards,
Pavel Pavlov
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>
Your example does not actually do anything with the selection so it is untestable.
Also, this is pretty much the same code i had on the 9th of august. Please see post above.
I had it display the correct items in the dropdown. But doing it this way it made the project stop getting to the submitedchanges event.
As described in post on the 9th of august.
I believe that debugging why your event is not fired would require me to have a look at your project.
To be able to attach the project , please open a support ticket refering this forum thread ( id 449848).
As I am not sure the problem is related to RadDataForm at all, I may also suggest to test it with the MS DataForm and let me know in case you get better results there.
Best wishes,
Pavel Pavlov
the Telerik team
Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward! We'd appreciate your vote for Telerik in this year's DevProConnections Awards. We are competing in mind-blowing 20 categories and every vote counts! VOTE for Telerik NOW >>
I can't provide you with my entire project as it is too large to post.
Again, all the necessary code has been provided above.
The code you have provided to me does NOT do anything. It is simply sample code. Sample that does not work in actual real live application.
You are missing the SelectedValuePath from your code. Without it I cannot save anything. Did you leave it out on purpose? And if so how do I go about passing this information of the selected item?