Telerik Forums
UI for WPF Forum
1 answer
101 views
In our view model we are clearing out an observerable collection (Schedule.Clear()) while a cell grid is in edit mode and we are getting the following exception.

Any ideas? We have a workaround for now where assign a new observable collection to the property but would rather clear.

System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.

Parameter name: index

at Telerik.Windows.Controls.GridView.GridViewDataControl.CommitCurrentEdit(GridViewRow gridViewRow)

at Telerik.Windows.Controls.GridView.GridViewDataControl.PerformRowEditEnded(GridViewCell currentCell)

at Telerik.Windows.Controls.GridView.GridViewDataControl.CommitCellEdit(GridViewCell currentCell, Boolean isLeavingRow)

at Telerik.Windows.Controls.GridView.GridViewDataControl.OnItemsChanged(NotifyCollectionChangedEventArgs e)

at Telerik.Windows.Controls.GridView.BaseItemsControl.OnItemCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)

at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)

at Telerik.Windows.Data.DataItemCollection.OnCollectionViewCollectionChanged(NotifyCollectionChangedEventArgs e)

at Telerik.Windows.Data.QueryableCollectionView.RefreshOverride()

at Telerik.Windows.Data.QueryableCollectionView.RefreshInternal()

at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
(More that was removed, but entry point from our code)

 

Dimitrina
Telerik team
 answered on 17 Jan 2012
4 answers
227 views
I am working with Telerik WPF controls, RadGridView, RadDataPager and VirtualQueryableCollectionView<T>.
The PageCount of RadDataPager is incorrect once i filtered the data via RadGridView header. The PageCount  is  
always 1.  please find attached image screenshot.

I do not know how to fix this issue. In following code, i set the VirtualItemCount value as new value but the RadDataPager show me 1 as PageCount. I could not move to next page.  

Assembly version is: 2011.3.1220.40

  <telerik:RadGridView x:Name="GridView" ItemsSource="{Binding DataView}" Width="700" MinHeight="386" MaxHeight="500"
                .........
</telerik:RadGridView>
 
<telerik:RadDataPager PageSize="100" Grid.Row="1" Source="{Binding DataView}"  />


 
public VirtualQueryableCollectionView<VSOEChageItemViewModel> DataView
     {
         get
         {
             if (_DataView == null)
             {
                 _DataView = new VirtualQueryableCollectionView<VSOEChageItemViewModel>() { LoadSize = 40, VirtualItemCount = 40 };
                 _DataView.ItemsLoading += DataViewItemsLoading;
             }
             return _DataView;
         }
         private set
         {
             if (_DataView != null)
             {
                 _DataView.ItemsLoading -= DataViewItemsLoading;
             }
 
             _DataView = value;
 
             if (_DataView != null)
             {
                 _DataView.ItemsLoading += DataViewItemsLoading;
             }
         }
     }
private void DataViewItemsLoading(object sender, VirtualQueryableCollectionViewItemsLoadingEventArgs e)
     {
         string filertString = GetFilertString();
 
         var sort = DataView.SortDescriptors;
         var sortString = sort.ToDynamicLinq();
         if (!string.IsNullOrEmpty(sortString))
             sortString = sortString.Remove(0, sortString.IndexOf(".") + 1);
 
         int allCount = 0;
         List<VSOEChageItemViewModel> dd1 = LoadData(filertString, sortString, e.StartIndex, e.ItemCount, out allCount);
 
 
         if (allCount != DataView.VirtualItemCount)
         {
             DataView.VirtualItemCount = allCount;
         }
 
         DataView.Load(e.StartIndex, dd1);
 
     }
Vlad
Telerik team
 answered on 17 Jan 2012
1 answer
136 views
Hi,

On a button click, is it possible to invoke a telerik datagrid column chooser context menu in WPF?

A code snipped will be appreciated

Thanks,
Priya
Maya
Telerik team
 answered on 17 Jan 2012
0 answers
180 views
Hi,
I am trying to create a program that will have a listbox on the left of database table names and then a grid area to the right.

When the user double clicks on a table name  a grid with the table data should be populated with the table data. Once it is open the user should be able to make changes and hit the save button that will submit the datacontext changes.

I have a linq to sql set up for the Northwind database for this example.

As soon as I make a change in the grid to a cell the entire row disappears??? not sure what I am doing wrong.

Thanks,
Jessica 
DataProvider.cs
 
 
 
namespace SampleLinqToSQL
{
    public static class DataProvider
    {
        private static NorthwindDataContext dataContext = null;
 
        public static NorthwindDataContext DataContext
        {
            get
            {
                return dataContext;
            }
        }
 
        static DataProvider()
        {
            dataContext = new NorthwindDataContext();
        }
 
        public static void SetDataContext(string connectionString)
        {
            dataContext = null;
            dataContext = new NorthwindDataContext(connectionString);
        }
    }
}


MainWindow.xaml
 
 
<Window x:Class="SampleLinqToSQL.MainWindow"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" Title="MainWindow" Height="350" Width="525">
    <DockPanel LastChildFill="True">
        <StackPanel DockPanel.Dock="Bottom" HorizontalAlignment="Right" Orientation="Horizontal">
            <Button x:Name="SaveBtn" Width="50" Height="25" Margin="5" Click="SaveBtn_Click">Save</Button>
            <Button x:Name="CancelBtn" Width="50" Height="25" Margin="5" Click="CancelBtn_Click">Cancel</Button>
        </StackPanel>
         
        <ListBox x:Name="TableNames" DockPanel.Dock="Left" Width="140" MouseDoubleClick="TableNames_MouseDoubleClick"></ListBox>
         
        <Border>
            <DockPanel x:Name="DocumentArea">
                <telerik:RadGridView x:Name="dataGridView"  AutoGenerateColumns="True" ItemsSource="{Binding}"  />
            </DockPanel>
        </Border>
    </DockPanel>
</Window>


MainWindow.xaml.cs
 
 
 
namespace SampleLinqToSQL
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private string sqlConnection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Path\Northwind.mdf;Integrated Security=True;User Instance=True";
        public MainWindow()
        {
            InitializeComponent();
 
            DataProvider.SetDataContext(sqlConnection);
 
            LoadTableNames();
        }
 
        private void LoadTableNames()
        {
            List<string> tableNames = new List<string>();
 
            foreach (PropertyInfo item in DataProvider.DataContext.GetType().GetProperties())
            {
                tableNames.Add(item.Name);
            }
 
            tableNames = tableNames.OrderBy(s => s).ToList();
            TableNames.ItemsSource = tableNames;
        }
 
        private void SaveBtn_Click(object sender, RoutedEventArgs e)
        {
            DataProvider.DataContext.SubmitChanges();
        }
 
        private void CancelBtn_Click(object sender, RoutedEventArgs e)
        {
            //TODO
        }
 
        private void TableNames_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (TableNames.SelectedItem != null)
            {
                dataGridView.DataContext = DataProvider.DataContext.GetTableByName(TableNames.SelectedItem.ToString()).AsParallel();
            }
        }
    }
}

Jessica
Top achievements
Rank 1
 asked on 16 Jan 2012
1 answer
128 views
I am using RadRibbonWindow to host a RadRibbonView, and set QuickAccessToolBarPosition to "AboveRibbon", but the QuickAccessToolBar is overlaying the application icon.  How can I shift the QuickAccessToolBar away from the application icon?  
I like to have the same format as Excel 2010 which has a separator between the application icon and the QuickAccessToolBar (please see the attachment).

Thanks.
Viktor Tsvetkov
Telerik team
 answered on 16 Jan 2012
1 answer
161 views
Hello,

I recently updated my application to the 2011 Q3 DLLs. I have a tab control that binds to an ObservableCollection for the ItemsSource. I have to add an item to the ObservableCollection in code. I used to be able to do an UpdateLayout on the tab control, and it would add the new tab. It doesn't do this anymore. I can set the ItemsSource to null and back to the ObservableCollection to get the tab to show up, but that has other very bad consequences in my application.

Have you seen this problem with the UpdateLayout not working? Do you know of a work around?

Thanks,
Scott
Sehe
Top achievements
Rank 1
 answered on 16 Jan 2012
1 answer
82 views
Is there a way to define an item minimized in xaml (so that it appears in the minimize area by default)?

My list is only 3 items and it looks silly to not have any items in the minimized area (using office_blue theme), so I'd like to push my third item there by default (since it's importance is less, it can be hidden away by default).

Petar Mladenov
Telerik team
 answered on 16 Jan 2012
1 answer
390 views

I am using a RadGridView to display some data in a hierarchy. I am using MvvM so I am building by grid in XAML and have very little code behind.

I have a very simple hierarchy where I have a list of objects (Agents) and each agent can have a list of sub agents and a list of clients. These lists are two separate properties of my agent object, i.e. Agent.Agents and Agent.ClientAccounts. An agent can have a list of clients and a list of sub agents so when the user expands an agent row they will see two child grids at the same level in the hierarchy.

I am using the grid_RowLoaded event to only allow expanding when I have either a list of SubAgents or a list of Clients.

My issue is that when one of the lists of either SubAgents or Clients doesn’t have any records I would like to hide the grid (or not even create it in the first place)

I have tried to set the visibility of the SubAgents and Clients  grids by using a converter so the grids are hidden when the lists have a count of 0 but that didn’t work

Any ideas would be much appreciated

Here is the structure of my grid

<telerik:RadGridView 
        x:Name="grid"
        BorderThickness="0"
        Background="Transparent"
        ShowGroupPanel="False" 
        IsReadOnly="True"
        DataContext="{Binding}" 
        ItemsSource="{Binding Path=AgentList}" 
        RowIndicatorVisibility="Collapsed" 
        GridLinesVisibility="None" 
        telerik:Theming.Theme="{DynamicResource TelerikThemeName}" 
        IsSynchronizedWithCurrentItem="True"
        ShowColumnHeaders="True" 
        AutoGenerateColumns="False" 
        acb:CommandBehavior.Event="MouseDoubleClick"  
        acb:CommandBehavior.Command="{Binding OpenAgentDetailsCommand}" 
        acb:CommandBehavior.CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=SelectedItem.CustomerId}" RowLoaded="grid_RowLoaded">
 
        <telerik:RadGridView.ChildTableDefinitions>
            <telerik:GridViewTableDefinition/>
        </telerik:RadGridView.ChildTableDefinitions>
 
        <telerik:RadGridView.Columns>
            <telerik:GridViewDataColumn DataMemberBinding="{Binding AccountId}" Header="Account Id" Width="Auto" />
            <telerik:GridViewDataColumn DataMemberBinding="{Binding CustomerId}" Header="CustomerId" Width="Auto" />
            <telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}" Header="FirstName" Width="Auto"/>
            <telerik:GridViewDataColumn DataMemberBinding="{Binding LastName}" Header="LastName" Width="Auto"/>
            <telerik:GridViewDataColumn DataMemberBinding="{Binding Volume}" Header="Volume" Width="Auto" DataFormatString="{}{0:N0}"/>
        </telerik:RadGridView.Columns>
        
        <telerik:RadGridView.HierarchyChildTemplate>
            <DataTemplate>
                <StackPanel>
 
                    <!--sub agents-->
                    <telerik:RadGridView ItemsSource="{Binding Path=Agents}" AutoGenerateColumns="False" ShowGroupPanel="False" 
                                         Visibility="{Binding Path=Agents.Count, Converter={StaticResource countToVisibleConverter}}">
                        <telerik:RadGridView.Columns>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding AccountId}" Header="Account Id" Width="Auto" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding CustomerId}" Header="CustomerId" Width="Auto" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}" Header="FirstName" Width="Auto"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding LastName}" Header="LastName" Width="Auto"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Volume}" Header="Volume" Width="Auto" DataFormatString="{}{0:N0}"/>
                        </telerik:RadGridView.Columns>
 
                        <telerik:RadGridView.ChildTableDefinitions>
                            <telerik:GridViewTableDefinition />
                        </telerik:RadGridView.ChildTableDefinitions>
 
                        <!--sub agents : clients-->
                        <telerik:RadGridView.HierarchyChildTemplate>
                            <DataTemplate>
                                <telerik:RadGridView ItemsSource="{Binding Path=ClientAccounts}" AutoGenerateColumns="False" ShowGroupPanel="False" 
                                                     Visibility="{Binding Path=ClientAccounts.Count, Converter={StaticResource countToVisibleConverter}}">
                                    <telerik:RadGridView.Columns>
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding AccountId}" Header="Account Id" Width="Auto" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}" Header="FirstName" Width="Auto"/>
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding LastName}" Header="LastName" Width="Auto"/>
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Volume}" Header="Volume" Width="Auto" DataFormatString="{}{0:N0}"/>
                                    </telerik:RadGridView.Columns>
                                </telerik:RadGridView>
                            </DataTemplate>
                        </telerik:RadGridView.HierarchyChildTemplate>
 
                    </telerik:RadGridView>
 
                    <!--clients-->
                    <telerik:RadGridView ItemsSource="{Binding Path=ClientAccounts}" AutoGenerateColumns="False" ShowGroupPanel="False" 
                                         Visibility="{Binding Path=ClientAccounts.Count, Converter={StaticResource countToVisibleConverter}}">
                        <telerik:RadGridView.Columns>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding AccountId}" Header="Account Id" Width="Auto" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}" Header="FirstName" Width="Auto"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding LastName}" Header="LastName" Width="Auto"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Volume}" Header="Volume" Width="Auto" DataFormatString="{}{0:N0}"/>
                        </telerik:RadGridView.Columns>
                    </telerik:RadGridView>
 
                </StackPanel>
                                        
            </DataTemplate>
        </telerik:RadGridView.HierarchyChildTemplate>
 
    </telerik:RadGridView>

James
Top achievements
Rank 1
 answered on 16 Jan 2012
2 answers
402 views
I have a grid view that uses a datatemple for each row to edit data.  when I add a new row I want the cursor to be focused in the textbox in the datatemplate on the row details.  Nothing seems to work.  I have to tab to get to the textbox.  
<Window x:Class="GridviewDataTemplateFocusExample.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
        xmlns:GridviewDataTemplateFocusExample="clr-namespace:GridviewDataTemplateFocusExample" Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <DataTemplate x:Key="DetailView" >
            <GridviewDataTemplateFocusExample:DetailView />
        </DataTemplate>
    </Window.Resources>
        <Grid>
        <telerik:RadGridView HorizontalAlignment="Stretch"  Name="radGridView1" VerticalAlignment="Stretch"
                             ItemsSource="{Binding MyData}"
                             AutoGenerateColumns="False"
                             CanUserInsertRows="True"
                             RowIndicatorVisibility="Collapsed"
                             CanUserDeleteRows="False"
                             ShowInsertRow="True"
                             ShowGroupPanel="False"
                             IsSynchronizedWithCurrentItem="True"
                             AddingNewDataItem="radGridView1_AddingNewDataItem"
                             LoadingRowDetails="radGridView1_LoadingRowDetails"
                             RowDetailsVisibilityMode="Collapsed"
                             RowDetailsTemplate="{StaticResource DetailView}" >
            <telerik:RadGridView.Columns>
                <telerik:GridViewToggleRowDetailsColumn/>
                <telerik:GridViewDataColumn Header="Title" Width="250" DataMemberBinding="{Binding Name}" UniqueName="TitleColumn"/>
            </telerik:RadGridView.Columns>
 
        </telerik:RadGridView>
    </Grid>
</Window>

using System;
using System.Windows;
using System.Windows.Input;
using Telerik.Windows.Controls.GridView;
 
namespace GridviewDataTemplateFocusExample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.DataContext = new MainWindowVM();
            InitializeComponent();
        }
 
        private void radGridView1_AddingNewDataItem(object sender, Telerik.Windows.Controls.GridView.GridViewAddingNewEventArgs e)
        {
            (this.DataContext as MainWindowVM).AddNewDataObject();
            radGridView1.CommitEdit();
            var gridView = e.OwnerGridViewItemsControl;
            gridView.ScrollIntoViewAsync(gridView.Items[gridView.Items.Count - 1], //the row
                        gridView.Columns[1], //the column
                        new Action<FrameworkElement>((f) =>
                        {
                            var row = f as GridViewRow;
                            if (row != null)
                            {
                                row.IsSelected = true;
                                row.DetailsVisibility = Visibility.Visible;
                            }
                        }));
            e.Cancel = true;
        }
 
        private void radGridView1_LoadingRowDetails(object sender, Telerik.Windows.Controls.GridView.GridViewRowDetailsEventArgs e)
        {
            Keyboard.Focus((e.DetailsElement as DetailView).tbxTitle);
 
        }
    }
}

using System.Collections.ObjectModel;
 
namespace GridviewDataTemplateFocusExample
{
    public class MainWindowVM
    {
        public ObservableCollection<DataObject> MyData { get; set; }
 
        public MainWindowVM()
        {
            MyData = new ObservableCollection<DataObject>();
            MyData.Add(new DataObject("Test 1"));
            MyData.Add(new DataObject("Test 2"));
            MyData.Add(new DataObject("Test 3"));
            MyData.Add(new DataObject("Test 4"));
            MyData.Add(new DataObject("Test 5"));
        }
 
        public void AddNewDataObject()
        {
            MyData.Add(new DataObject("Test ??????"));
        }
    }
 
    public class DataObject
    {
        public DataObject(string name)
        {
            Name = name;
        }
        public string Name { get; set; }
    }
}

<UserControl x:Class="GridviewDataTemplateFocusExample.DetailView"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Grid FocusManager.FocusedElement="{Binding ElementName=tbxTitle}"  FocusManager.IsFocusScope="True">
            <Border BorderThickness="2" Margin="3" BorderBrush="Black" CornerRadius="12" Padding="5" Background="Transparent" HorizontalAlignment="Stretch" >
                <telerik:RadTabControl Margin="2"  BackgroundVisibility="Hidden" HorizontalAlignment="Stretch" >
                    <telerik:RadTabItem Header="Details"  >
                        <Grid Width="Auto" HorizontalAlignment="Stretch" Background="Transparent" Margin="5" >
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
 
                            <TextBlock Text="Name: " Margin="0,5,0,5" FontWeight="Bold" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Left"  Focusable="False"/>
                            <TextBox Name="tbxTitle" Text="{Binding Name}" Margin="0,5,0,5" Grid.Row="0" Grid.Column="1" 
                                 VerticalAlignment="Center" HorizontalAlignment="Stretch"  Focusable="true"
 
                                 />
 
                        </Grid>
                    </telerik:RadTabItem>
                    <telerik:RadTabItem Header="Page 2" >
  
                    </telerik:RadTabItem>
                    <telerik:RadTabItem Header="Page 3" >
                     </telerik:RadTabItem>
 
                </telerik:RadTabControl>
            </Border>
        </Grid>
    </Grid>
</UserControl>

Patricia
Top achievements
Rank 1
 answered on 16 Jan 2012
1 answer
128 views
Does Telerik have a control for WPF that's similar to the RadTitleBar for Winforms? I'd like to be able to have a theme-aware Title Bar for WPF.
Hristo
Telerik team
 answered on 16 Jan 2012
Narrow your results
Selected tags
Tags
GridView
General Discussions
Chart
RichTextBox
Docking
ScheduleView
ChartView
TreeView
Diagram
Map
ComboBox
TreeListView
Window
RibbonView and RibbonWindow
PropertyGrid
DragAndDrop
TabControl
TileView
Carousel
DataForm
PDFViewer
MaskedInput (Numeric, DateTime, Text, Currency)
AutoCompleteBox
DatePicker
Buttons
ListBox
GanttView
PivotGrid
Spreadsheet
Gauges
NumericUpDown
PanelBar
DateTimePicker
DataFilter
Menu
ContextMenu
TimeLine
Calendar
Installer and Visual Studio Extensions
ImageEditor
BusyIndicator
Expander
Slider
TileList
PersistenceFramework
DataPager
Styling
TimeBar
OutlookBar
TransitionControl
FileDialogs
Book
ToolBar
ColorPicker
TimePicker
MultiColumnComboBox
SyntaxEditor
VirtualGrid
Wizard
ExpressionEditor
NavigationView (Hamburger Menu)
WatermarkTextBox
DesktopAlert
BarCode
SpellChecker
DataServiceDataSource
EntityFrameworkDataSource
RadialMenu
ChartView3D
Data Virtualization
BreadCrumb
LayoutControl
ProgressBar
Sparkline
TabbedWindow
ToolTip
CloudUpload
ColorEditor
TreeMap and PivotMap
EntityFrameworkCoreDataSource (.Net Core)
HeatMap
Chat (Conversational UI)
VirtualizingWrapPanel
Calculator
NotifyIcon
TaskBoard
TimeSpanPicker
BulletGraph
Licensing
WebCam
CardView
DataBar
FilePathPicker
PasswordBox
SplashScreen
Callout
Rating
Accessibility
CollectionNavigator
Localization
AutoSuggestBox
Security
VirtualKeyboard
HighlightTextBlock
TouchManager
StepProgressBar
Badge
OfficeNavigationBar
ExpressionParser
CircularProgressBar
SvgImage
PipsPager
SlideView
AI Coding Assistant
+? more
Top users last month
Cynthia
Top achievements
Rank 1
Iron
Toby
Top achievements
Rank 3
Iron
Iron
Iron
Danielle
Top achievements
Rank 1
Iron
Iron
Joel
Top achievements
Rank 3
Bronze
Bronze
Iron
yw
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Cynthia
Top achievements
Rank 1
Iron
Toby
Top achievements
Rank 3
Iron
Iron
Iron
Danielle
Top achievements
Rank 1
Iron
Iron
Joel
Top achievements
Rank 3
Bronze
Bronze
Iron
yw
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?