Click here to Skip to main content
15,884,472 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
hello guys,
I am developing an application and for some needs i want to design DataGrid which Contains a Datagrid ComboBox Columns and when user select a member of the column list a new data bounded to the DataGrid Row Like (Unit Cost of the Selected Item ...etc).
the problem is when i change the Values of these fields in the ObservableCollections does not appear in the data grid Cell View even if i inserted a new Row and it is Fully Edited in the Observable Collection
this is my XML

XML
<datagrid name="dgOrderItems">
                          Grid.Row="2" 
                          Margin="10,0,10,10"                          
                          CanUserAddRows="False"
                          CanUserDeleteRows="True"
                          CanUserResizeColumns="False"
                          CanUserReorderColumns="False"
                          CanUserResizeRows="False"
                          CanUserSortColumns="False"
                          AutoGenerateColumns="False"
                          SelectionMode="Single"
                          PreviewKeyDown="dgOrderItems_PreviewKeyDown"
                          BeginningEdit="dgOrderItems_BeginningEdit" >
                    <datagrid.resources>
                        <resourcedictionary>
                            <resourcedictionary.mergeddictionaries>
                                <resourcedictionary source="/PresentationFramework.Classic;component/themes/Classic.xaml" />
                            </resourcedictionary.mergeddictionaries>
                        </resourcedictionary>
                    </datagrid.resources>
                    <datagrid.columns>
                        <!--<datagridtemplatecolumn width="200" header="Item">
                            <datagridtemplatecolumn.celltemplate>
                                <datatemplate x:name="dt" xmlns:x="#unknown">
                                    <combobox x:name="Cmx">
                                              SelectionChanged="Cmx_SelectionChanged"
                                              Spy:ElementSpy.NameScopeSource="{StaticResource Espy}"
                                              ItemsSource="{Binding Source={StaticResource data}}"
                                              SelectedValuePath="ID" 
                                              DisplayMemberPath="Description" 
                                              SelectedValue="{Binding Path=ID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                                    </combobox>
                                </datatemplate>
                            </datagridtemplatecolumn.celltemplate>
                        </datagridtemplatecolumn>-->
                        <datagridcheckboxcolumn header="Recieved" width="Auto">
                                                IsReadOnly="True" 
                                                Binding="{Binding Path=ISRecieved, Mode=TwoWay}"
                                                ></datagridcheckboxcolumn>
                        <datagridcomboboxcolumn x:name="cmxitems" header="Item" width="*" xmlns:x="#unknown">
                                                DisplayMemberPath="Description" 
                                                SelectedValuePath="ID"
                                                SelectedValueBinding="{Binding Path=ItemID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True,  ValidatesOnDataErrors=True}">
                            <datagridcomboboxcolumn.editingelementstyle>
                                <Style TargetType="{x:Type ComboBox}">
                                    <setter property="BorderBrush" value="Transparent" />
                                    <setter property="IsEditable" value="True" />
                                    <setter property="IsSynchronizedWithCurrentItem" value="True" />
                                    <setter property="AllowDrop" value="True" />
                                    <setter property="IsDropDownOpen" value="true" />
                                    <setter property="IsTextSearchEnabled" value="True"></setter>
                                    <eventsetter event="SelectionChanged" handler="cmxitems_SelectionChanged"></eventsetter>
                                    <setter>
                                        <setter.property>
                                            ItemsPanel
                                        </setter.property>
                                        <setter.value>
                                            <itemspaneltemplate>
                                                <virtualizingstackpanel />
                                            </itemspaneltemplate>
                                        </setter.value>
                                    </setter>
                                    <Style.Triggers>
                                        <trigger property="IsHitTestVisible" value="True">
                                            <setter property="IsDropDownOpen" value="True" />
                                        </trigger>
                                    </Style.Triggers>
                                </Style>
                            </datagridcomboboxcolumn.editingelementstyle>
                        </datagridcomboboxcolumn>
                        <datagridcomboboxcolumn x:name="cmxGlAccounts" header="GL Account" width="*" displaymemberpath="Description" xmlns:x="#unknown">
                                                SelectedValuePath="ID" 
                                                SelectedValueBinding="{Binding Path=GLAccountInventoryID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True,  ValidatesOnDataErrors=True}">
                            <datagridcomboboxcolumn.editingelementstyle>
                                <Style TargetType="{x:Type ComboBox}">
                                    <setter property="BorderBrush" value="Transparent" />
                                    <setter property="IsEditable" value="True" />
                                    <setter property="IsSynchronizedWithCurrentItem" value="True" />
                                    <setter property="AllowDrop" value="True" />
                                    <setter property="IsDropDownOpen" value="true" />
                                    <setter property="IsTextSearchEnabled" value="True"></setter>
                                    <setter>
                                        <setter.property>
                                            ItemsPanel
                                        </setter.property>
                                        <setter.value>
                                            <itemspaneltemplate>
                                                <virtualizingstackpanel />
                                            </itemspaneltemplate>
                                        </setter.value>
                                    </setter>
                                    <Style.Triggers>
                                        <trigger property="IsHitTestVisible" value="True">
                                            <setter property="IsDropDownOpen" value="True" />
                                        </trigger>
                                    </Style.Triggers>
                                </Style>
                            </datagridcomboboxcolumn.editingelementstyle>
                        </datagridcomboboxcolumn>
                        <datagridtextcolumn header="Description" width="3*" binding="{Binding Path=Description, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True,  ValidatesOnDataErrors=True}"></datagridtextcolumn>
                        <datagridtextcolumn header="Quantity" width="100" binding="{Binding Path=Quantity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True,  ValidatesOnDataErrors=True}">
                            <datagridtextcolumn.editingelementstyle>
                                <Style TargetType="{x:Type TextBox}">
                                    <eventsetter event="KeyDown" handler="TEXT_QuantityEntered"></eventsetter>
                                </Style>
                            </datagridtextcolumn.editingelementstyle>
                        </datagridtextcolumn>
                        <datagridtextcolumn header="Unit Price ($)">
                                            Width="100" 
                                            Binding="{Binding Path=UnitPrice, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True,  ValidatesOnDataErrors=True}">
                            <datagridtextcolumn.editingelementstyle>
                                <Style TargetType="{x:Type TextBox}">
                                    <eventsetter event="KeyDown" handler="TEXT_UnitPriceEntered"></eventsetter>
                                </Style>
                            </datagridtextcolumn.editingelementstyle>
                        </datagridtextcolumn>
                        <datagridtextcolumn header="Amount($)" width="100" binding="{Binding Path=Amount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True,  ValidatesOnDataErrors=True}" isreadonly="True"></datagridtextcolumn>
                    </datagrid.columns>
                    <datagrid.contextmenu>
                        <contextmenu>
                            <menuitem header="Add New Item" name="NewOrderItem" click="NewOrderItem_Click"></menuitem>
                            <menuitem header="Delete Selected Item" name="DeleteOrderItem" click="DeleteOrderItem_Click"></menuitem>
                        </contextmenu>
                    </datagrid.contextmenu>
                </datagrid>


and this is MY Source Code

C#
 void ReFillOrderItems()
        {
            if (this.ICurrentOrderID != -1)
            {
                this.orderitems = ClsPurchaseController.SelectAllOrderItems_ByOrderIDList(this.ICurrentOrderID);
            }
            else
            {
                this.orderitems = new List<orderitem>();
            }
            this.dgOrderItems.ItemsSource = this.orderitems;
        } 

private void cmxitems_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                ComboBox cmx = sender as ComboBox;
                this.RefillItemDefaults(Convert.ToInt32((int)cmx.SelectedValue));
            }
            catch
            {
                
            }
        }
Posted
Updated 20-Apr-14 2:35am
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900