Hi,
Assume I have fixed number of rows & node structure, and number of columns and columns data would change. When I come back to the screen, it should retain the previous node expand/collapse state.
Is there any way to achieve this functionality?
Thanks,
Suman
<telerik:GridViewDataColumn Header="Account" DataMemberBinding="{Binding AccountName}" FooterCellStyle="{StaticResource GridNoLinesFooterStyle}"> <telerik:GridViewDataColumn.CellTemplate> <DataTemplate> <!--<Button Content="{Binding AccountName}" Command="{Binding DataContext.OpenAccountCommand, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}}" CommandParameter="{Binding}"/>--> <!--<telerik:RadButton Content="{Binding AccountName}" Command="{Binding DataContext.OpenAccountCommand, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}}" CommandParameter="{Binding}" Style="{StaticResource hyperlinkButtonStyle}" />--> <TextBlock> <Hyperlink Command="{Binding DataContext.OpenAccountCommand, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}}" CommandParameter="{Binding}"> <TextBlock Text="{Binding AccountName}"></TextBlock> </Hyperlink> </TextBlock> </DataTemplate> </telerik:GridViewDataColumn.CellTemplate> <telerik:GridViewBoundColumnBase.AggregateFunctions> <telerik:CountFunction Caption="Count:" /> </telerik:GridViewBoundColumnBase.AggregateFunctions> </telerik:GridViewDataColumn> <
telerik:RadTreeListView x:Name="rtlvPeopleInfo" >
<!--Context Menu-->
<telerik:RadContextMenu.ContextMenu>
<telerik:RadContextMenu x:Name="radPeopleContextMenu" Opened="radPeopleContextMenu_Opened" >
<telerik:RadMenuItem x:Name="rmiAssign_Engineer" Header="Assign Engineer"/>
</telerik:RadContextMenu>
</telerik:RadContextMenu.ContextMenu>
<telerik:RadTreeListView.Columns>
<telerik:GridViewDataColumn Header="Future Hrs" TextAlignment="Right"/>
<telerik:GridViewDataColumn Header="Previous Hrs" TextAlignment="Right"/>
</telerik:RadTreeListView.Columns>
</telerik:RadTreeListView>
Whenever I normally right click on any cell then it opens correctly and that is fine. But my requirement was if there is any unsaved data on page by cell edit, then when user right click on other cell it should show a message that "User changes will be lost, do u want to continue?". If yes then open the context menu as it is. So when there is any change on page then I show a messagebox with above confirmation message. Now if user selects "Yes" then the context menu opens on the top most left corner of the TreeListView, not on the cell right clicked. Please help me how I will open on same position the user mouse clicked, not the topmost left corner.
So the problem arises only when i open the messagebox confirmation.
<telerik:RadGridView Name="grdOrders" Grid.Row="1" AutoGenerateColumns="False" ItemsSource="{Binding LineItems}" SelectedItem="{Binding Path=SelectedLineItem}" IsSynchronizedWithCurrentItem="True" IsReadOnly="True" ClipboardCopyMode="Cells" RowStyleSelector="{StaticResource backorderStyleSelector}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" MouseDoubleClick="grdOrders_MouseDoubleClick" SelectionMode="Extended"> <i:Interaction.Behaviors> <b:MultiSelectBehavior SelectedItems="{Binding Path=SelectedLineItems}" /> </i:Interaction.Behaviors> <telerik:RadGridView.Columns> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=GPPONumber}" Header="GP PO Number" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=LineItemId}" Header="Line Item Id" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=Quantity}" Header="Quantity" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=PartNumber}" Header="Part Number" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=Description}" Header="Description" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=WarehouseCode}" Header="Warehouse" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=WarehouseBin}" Header="Bin Location" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=ShippingMethod}" Header="Shipping Method" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=VendorName}" Header="Vendor Name" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=Salesrep}" Header="Sales Rep" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=SourcedBy}" Header="Sourced By" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=Backordered}" Header="B/O?" /> </telerik:RadGridView.Columns> </telerik:RadGridView>public ObservableCollection<WarehouseLineItemProxy> LineItems { get { return lineItems; } set { lineItems = value; RaisePropertyChanged(() => LineItems); ViewOrderInfoCommand.RaiseCanExecuteChanged(); } }refreshTimer = new DispatcherTimer();refreshTimer.Interval = TimeSpan.FromSeconds(60);refreshTimer.Tick += new EventHandler(refreshTimer_Tick);/// <summary> /// Handles the Tick event of the refreshTimer control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> private void refreshTimer_Tick(object sender, EventArgs e) { refreshTimer.Stop(); RefreshLineItems(new object()); refreshTimer.Start(); }/// <summary> /// Refreshes the line items. /// </summary> /// <param name="arg">The arg.</param> private void RefreshLineItems(object arg) { if (!worker.IsBusy) { ShowBusyIndicator = true; worker.RunWorkerAsync(); refreshTimer.Stop(); refreshTimer.Start(); } }/// <summary> /// Handles the DoWork event of the worker control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.ComponentModel.DoWorkEventArgs"/> instance containing the event data.</param> private void worker_DoWork(object sender, DoWorkEventArgs e) { e.Result = adapter.LoadWarehouseOrders(); }/// <summary> /// Handles the RunWorkerCompleted event of the worker control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.ComponentModel.RunWorkerCompletedEventArgs"/> instance containing the event data.</param> private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Dispatcher.CurrentDispatcher.BeginInvoke(new Action<ObservableCollection<WarehouseLineItemProxy>>(this.UpdateGridData), e.Result); } /// <summary> /// Updates the grid data. /// </summary> /// <param name="lineItems">The line items.</param> private void UpdateGridData(ObservableCollection<WarehouseLineItemProxy> lineItems) { LineItems = lineItems; ShowBusyIndicator = false; }<ControlTemplate x:Key="EditAppointmentTemplate" TargetType="{x:Type telerik:SchedulerDialog}">
<Grid VerticalAlignment="Center" Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="Number of Tap Activity" Height="25"/>
<telerik:RadNumericUpDown Grid.Column="1" Height="25" Width="50" NumberDecimalDigits="0" ValueFormat="Numeric" HorizontalAlignment="Left"
Value="{Binding Occurrence.Appointment.TapActivityNum, Mode=TwoWay}" />
</Grid>
</ControlTemplate>
<Style x:Key="EditAppointmentStyle" TargetType="telerik:SchedulerDialog">
<Setter Property="Width" Value="250" />
<Setter Property="Height" Value="100" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Template" Value="{StaticResource EditAppointmentTemplate}" />
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Number of Tap Activity" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>