Hi ,
I have defined one XamGrid with ComboBoxColumn.
<ig:XamGrid x:Name="ManageRecipeStateGrid" AutoGenerateColumns="False" ColumnWidth="*" ItemsSource="{Binding ManageRecipeStateResults}">
<ig:XamGrid.GroupBySettings>
<ig:GroupBySettings AllowGroupByArea="Hidden" GroupByOperation="MergeCells" />
</ig:XamGrid.GroupBySettings>
<ig:XamGrid.Columns>
<ig:TextColumn Key="RecipeKey" Visibility="Collapsed" />
<ig:TextColumn Key="MandatoryCriteriaList" HeaderText="Recipe" IsReadOnly="True" >
</ig:TextColumn>
<ig:TextColumn Key="RecipeVersion" HeaderText="Version" IsReadOnly="True">
<ig:TextColumn Key="PreviousRecipeState" Visibility="Collapsed" />
<ig:ComboBoxColumn Width="120" HorizontalContentAlignment="Stretch"
ItemsSource="{Binding Source={StaticResource optionList}}" Key="CurrentRecipeState"
SelectedValuePath="State"
DisplayMemberPath="State"
AllowEditingValidation="True" HeaderText="Recipe State">
</ig:ComboBoxColumn>
<ig:CheckBoxColumn Key="IsPreserved" HeaderText="Preserve Recipe">
</ig:CheckBoxColumn>
</ig:XamGrid.Columns>
<ig:XamGrid.EditingSettings>
<ig:EditingSettings AllowEditing="Hover" />
</ig:XamGrid.EditingSettings>
</ig:XamGrid>
Now I want to handle the event whenever I change the item selection in ComboBoxColumn. How I can handle this ?
Hello,
Thank you for your post. I have been investigating how you can handle the selection changed event of the ComboBoxColumns and since the column is using a ComboBox as an editor when the cell is in edit mode, you can handle the SelectionChange event of the ComboBox. To do that, you can handle the CellEnteredEditMode event of the XamGrid and if the cell is of the ComboBoxColumn you can handle the SelectionChanged event. Here is an example for that:
private void ManageRecipeStateGrid_CellEnteredEditMode(object sender, Infragistics.Controls.Grids.EditingCellEventArgs e) { if (e.Cell.Column.Key.Equals("CurrentRecipeState")) { (e.Cell.Control.Content as ComboBox).SelectionChanged += new SelectionChangedEventHandler(MainWindow_SelectionChanged); } } void MainWindow_SelectionChanged(object sender, SelectionChangedEventArgs e) { //Do Something }
Another approach that you can use is creating a TemplteColumn instead of a ComboBoxColumn and in the EidorTemplate you can add a XamComboEdior and handle the SelectedItemChanged event. I have created a sample application for you, based on the code snippet that you have provide, which implements the mentioned approach.
Please let me know if you need any further assistance on the matter.
Sincerely,
Krasimir
Developer Support Engineer
Infragistics
www.infragistics.com/support
Hi,
How to select a selecteditem from combobox.
combobox.sleecteditem properties is not availablethen how we can store the sleecteditem to sql table?
can u give any idea?
thanks
hi,
how i get selecteditem from that combobox column in xamgrid.this is my problem can you solve this please.
The sample you attached for SelectedItemChanged works fine. I have few more questions.
I want to align text in middle of cell how this can be done? Also I want to change the color of headers in the sample attached.
Can you please help with this ?
Thanks
Arpita
Hello Arpita,
I have modified the sample application that I have sent you previously in order to implement the appearance that you have described. To center the value of the cells, I have changed the default style for the CellControl. In order to change the background of the headers in the XamGrid, I have created a style for the HeaderCellControl and add a setter for the Background property.
Hi Krasimir,
The solution works fine. But when I group columns according to MandatoryCriteriaList in the project and change setting AllowEditing="Hover" in XamGrid.EditingSettings. The behaviour is weird as I hover or click on any row I see "Recipe" column value in "Recipe" column. I do not want to see this "Recipe" column value every time I click or hover on any row because I have already grouped by Recipe column and it is already shown once. Plus the values in Recipe column are aligned to left but when I click or hover on any row the value in "Recipe" column gets aligned in center.
I have attached the modified solution. Please look into this.
Thank you for your reply. I have been looking into the behavior that you have described and it seems that this is the default behavior in the scenario that you are having. The behavior is appearing, because when a row becomes active and there is a column that is grouped and the cell merging is enabled, the cell of the active row and the column that is grouped goes over the MergedContentControl that is visible if no row is active. In order to avoid this behavior you can add the following style in the resources of your application and set is as an CellStype for the columnd that you are grouping:
<Style TargetType="{x:Type ig:CellControl}" x:Key="HiddenCell"> <Setter Property="Opacity" Value="1"/> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Cell.Column.IsGroupBy}" Value="True"> <Setter Property="Opacity" Value="0"/> </DataTrigger> </Style.Triggers> </Style> ....... <ig:TextColumn Key="MandatoryCriteriaList" HeaderText="Recipe" IsReadOnly="True" CellStyle="{StaticResource HiddenCell}" /> .......
Thank you for your reply. I am very glad that the approach I have suggested was helpful for you. Please let me know if you need any further assistance on the matter.
Thanks for the help. This works for me.
I am just checking if you require any further assistance on the matter.
Thank you for your reply. I am very glad that the approach I have suggested was helpful. I am using the SetCellValue method, since the Cell.Value property is read only and you can set the value of the cell, through the cell itself. This method is creating a CellValueObject which contains one dependency property and then creates a Binding between the property that corresponds to the current cell and the Value property of the CellValueObject, through the Data of the current row. After that, it sets the Value property of the CellValueObject, which triggers the Binding and this way the value of the property that corresponds to the cell is set, without interacting with the Data item of the current row.
Regarding the code that you have mentioned, in the CellExitingEditMode, I am de-attaching the handler, since each time the editor enters edit mode, a handler is attached to the Click event. If this code is commented, the hadnlers of the event will increase with one each time the Cell enters edit mode. This will case multiple execution of the the same function and when you enter ‘n’ times edit mode, for one cell and then click on the CheckBox, you will see that ‘n’ MessageBoxes are opened one after another.
Thsi is fine. Can you please explain this SetCellValue function and why you have used this line
(e.Editor
as CheckBox).Click -= new RoutedEventHandler
(MainWindow_Click);
in CellExitingEditMode event.