Newsgroup: it.comp.dotnet
Titolo: FilterDescriptor

Un saluto a tutti.
Scenario: Silverlight
Praticamente quando carico la pagina mi compaiono due messaggi di errore di 
questo tipo :
System.InvalidOperationException:Impossibile valutare FilterDescriptor con 
PropertyPath uguale a 'DATARILEVAZIONE', ---> 
System.ArgumentException:Operatore 'IsEqualTo' incompatibile con tipi di 
operandi 'DateTime' e 'null' .....
un volta scaricati i messaggi (click sull'unico button presente sulla 
finestra del msg) si riempie la combobox e poi le due datagrid che dipendono 
dalla combo. Selezionando poi date diverse sulla combo le datagrid si 
aggiornano correttamente.
Credo che il problema sia dovuto alla sequenza di caricamento dei controlli, 
ho provato ad inserire anche questo nella MainPage :
Public Sub New()
InitializeComponent()
Me.ddsuvSelDataRil.Load()
End Sub
ma la sostanza non cambia.
Cosa mi sfugge?
Grazie e ciao
Giovanni 

 operandi 'DateTime' e 'null' .....
RIA? sembra che la tua "data source" contenga dei DateTime e anche un 
valore null che in fase di filtro non può essere confrontato, 
ovviamente, con un DateTime.
.m
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com
blog @ 
http://milestone.topics.it
whynot [ at ] topics [ dot ] it

con un DateTime.
Si RIA, più che contenere un valore null non contiene nessun dato.
In questo evento VF risulta False, come mai?:
Private Sub ddsDataRil_LoadingData(sender As Object, e As 
System.Windows.Controls.LoadingDataEventArgs) Handles ddsDataRil.LoadingData
       Dim VF As Boolean = ddsDataRil.IsLoadingData
   End Sub
Quello che non capisco è che scaricati i messaggi il datagrid alimentato da 
ddsDataRil si popola e anche il datagrid collegato si popola con i dati 
filtrati. Questo mi succede solo con le date.
Grazie e ciao
Giovanni 

 filtrati. Questo mi succede solo con le date.
riesci a pacchettizare un esempio che riproduca il problema?
.m
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro


riesci a pacchettizare un esempio che riproduca il problema?
Si, era mia intenzione chiedere a qualcuno di dargli un'occhiata.
Dove lo posto poi?
Grazie e ciao
Giovanni 

riesci a pacchettizare un esempio che riproduca il problema?
Il progetto con allegati il db SQL completo e qli script per generare le 
tabelle e per inserire i dati li trovi qui:
http://www.mediafire.com/myfiles.php
Grazie e ciao
Giovanni 

riesci a pacchettizare un esempio che riproduca il problema?
Credo di aver inviato un link errato nel post precedente. Questo dovrebbe 
essere corretto:
http://www.mediafire.com/?pcmdz8dol5d8vwj
Ciao
Giovanni 

 Giovanni


che compensa questo scenario.
Ho inserito questo in un file *.vb all'interno del progetto SL:
Imports System.ServiceModel.DomainServices.Client
Imports System.Windows.Data
Namespace Test
    Public Class DateTimeConverter
        Implements IValueConverter
        Public Function Convert(ByVal value As Object, _
                    ByVal targetType As System.Type, _
                    ByVal parameter As Object, _
                    ByVal culture As System.Globalization.CultureInfo) _
                    As Object _
                    Implements System.Windows.Data.IValueConverter.Convert
            Dim DateValue As DateTime = CDate(value)
            Return DateValue.ToShortDateString()
        End Function
        Public Function ConvertBack(ByVal value As Object, _
                    ByVal targetType As System.Type, _
                    ByVal parameter As Object, _
                    ByVal culture As System.Globalization.CultureInfo) _
                    As Object _
                    Implements 
System.Windows.Data.IValueConverter.ConvertBack
            Dim StrValue As String = value.ToString()
            Dim ResultDateTime As DateTime
            If DateTime.TryParse(StrValue, ResultDateTime) Then
                Return ResultDateTime
            End If
            Return value
        End Function
    End Class
End Namespace
Poi ho modificato lo XAML in questo modo:
<UserControl x:Class="Filtro.MainPage"
    xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation
"
    xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml
"
    xmlns:d="
http://schemas.microsoft.com/expression/blend/2008
"
    xmlns:mc="
http://schemas.openxmlformats.org/markup-compatibility/2006
"
    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
    xmlns:converter="clr-namespace:Filtro.Test"
    mc:Ignorable="d"
    d:DesignHeight="387" d:DesignWidth="691"
    xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices"
    xmlns:my="clr-namespace:Filtro.TestFilter"
    xmlns:sdk="
http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk
">
    <UserControl.Resources>
        <converter:DateTimeConverter
            x:Key="dateconverter">
        </converter:DateTimeConverter>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White">
        <riaControls:DomainDataSource AutoLoad="True" 
d:DesignData="{d:DesignInstance my:TADataRil, CreateList=true}" Height="0" 
Name="ddsDataRil" QueryName="GetTADataRilQuery" Width="0">
            <riaControls:DomainDataSource.DomainContext>
                <my:FILTRODS />
            </riaControls:DomainDataSource.DomainContext>
        </riaControls:DomainDataSource>
        <sdk:DataGrid AutoGenerateColumns="False" Height="131" 
HorizontalAlignment="Left" ItemsSource="{Binding ElementName=ddsDataRil, 
Path=Data}" Margin="12,12,0,0" Name="dgDataRil" 
RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" 
Width="141">
            <sdk:DataGrid.Columns>
                <sdk:DataGridTemplateColumn x:Name="DATARILEVAZIONEColumn" 
Header="DATARILEVAZIONE" IsReadOnly="True" Width="SizeToHeader">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=DATARILEVAZIONE, 
Mode=OneWay}" />
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
            </sdk:DataGrid.Columns>
        </sdk:DataGrid>
        <riaControls:DomainDataSource AutoLoad="True" 
d:DesignData="{d:DesignInstance my:TAMaster, CreateList=true}" Height="0" 
Name="ddsTAMaster" QueryName="GetTAMasterQuery" Width="0">
            <riaControls:DomainDataSource.DomainContext>
                <my:FILTRODS />
            </riaControls:DomainDataSource.DomainContext>
            <riaControls:DomainDataSource.FilterDescriptors>
                <riaControls:FilterDescriptor x:Name="CP" 
PropertyPath="DATARILEVAZIONE" Operator="IsEqualTo"  Value="{Binding 
Converter={StaticResource dateconverter},ConverterParameter='dd-MMM-yyyy', 
ElementName=dgDataRil,  Path=SelectedItem.DATARILEVAZIONE}" />
            </riaControls:DomainDataSource.FilterDescriptors>
        </riaControls:DomainDataSource>
        <sdk:DataGrid AutoGenerateColumns="False" Height="200" 
HorizontalAlignment="Left" ItemsSource="{Binding ElementName=ddsTAMaster, 
Path=Data}" Margin="12,149,0,0" Name="dgTAMaster" 
RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" 
Width="667">
            <sdk:DataGrid.Columns>
                <sdk:DataGridTextColumn x:Name="CODASLColumn" 
Binding="{Binding Path=CODASL, Mode=OneWay}" Header="CODASL" 
IsReadOnly="True" Width="SizeToHeader" />
                <sdk:DataGridTextColumn x:Name="CODEROGATOREColumn" 
Binding="{Binding Path=CODEROGATORE, Mode=OneWay}" Header="CODEROGATORE" 
IsReadOnly="True" Width="SizeToHeader" />
                <sdk:DataGridTextColumn x:Name="CODPRESTAZIONEColumn" 
Binding="{Binding Path=CODPRESTAZIONE, Mode=OneWay}" Header="CODPRESTAZIONE" 
IsReadOnly="True" Width="SizeToHeader" />
                <sdk:DataGridTemplateColumn x:Name="DATARILEVAZIONEColumn1" 
Header="DATARILEVAZIONE" IsReadOnly="True" Width="SizeToHeader">
                    <sdk:DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <sdk:DatePicker SelectedDate="{Binding 
Path=DATARILEVAZIONE, Mode=OneWay}" />
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellEditingTemplate>
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding DATARILEVAZIONE, 
Converter={StaticResource dateconverter},ConverterParameter='dd-MMM-yyyy'}" 
/>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
                <sdk:DataGridTextColumn x:Name="GARANZIA_TMAXColumn" 
Binding="{Binding Path=GARANZIA_TMAX}" Header="GARANZIA TMAX" 
Width="SizeToHeader" />
                <sdk:DataGridTextColumn x:Name="N_AGENDE_AColumn" 
Binding="{Binding Path=N_AGENDE_A}" Header="N AGENDE A" Width="SizeToHeader" 
/>
                <sdk:DataGridTextColumn x:Name="N_AGENDE_CColumn" 
Binding="{Binding Path=N_AGENDE_C}" Header="N AGENDE C" Width="SizeToHeader" 
/>
                <sdk:DataGridTextColumn x:Name="N_FOLLOW_SCREENINGColumn" 
Binding="{Binding Path=N_FOLLOW_SCREENING}" Header="N FOLLOW SCREENING" 
Width="SizeToHeader" />
                <sdk:DataGridTextColumn x:Name="N_PRENOTATIColumn" 
Binding="{Binding Path=N_PRENOTATI}" Header="N PRENOTATI" 
Width="SizeToHeader" />
                <sdk:DataGridTextColumn x:Name="N_PRIMADIAGNOSIColumn" 
Binding="{Binding Path=N_PRIMADIAGNOSI}" Header="N PRIMADIAGNOSI" 
Width="SizeToHeader" />
                <sdk:DataGridTextColumn x:Name="N_URGENTIColumn" 
Binding="{Binding Path=N_URGENTI}" Header="N URGENTI" Width="SizeToHeader" 
/>
                <sdk:DataGridTextColumn x:Name="N_UTENTI_INIZIOColumn" 
Binding="{Binding Path=N_UTENTI_INIZIO}" Header="N UTENTI INIZIO" 
Width="SizeToHeader" />
            </sdk:DataGrid.Columns>
        </sdk:DataGrid>
    </Grid>
</UserControl>
Ma nulla l'errore compare sempre. Andando di debug le due Function sopra 
vengono valutate dopo la comparsa dell'errore, cosa ho sbagliato?
Poi... quello che non capisco è che se utilizzo un altro tipo di dati in 
luogo di DateTime per il binding, tutto funziona.
Grazie e ciao
Giovanni 

 ElementName=dgDataRil,  Path=SelectedItem.DATARILEVAZIONE}" />
è SelectedItem che è null e di conseguenza la Data, inoltre prova a 
mettere un breakpoint sul tuo converter come può funzionare?


un breakpoint sul tuo converter come può funzionare?
Nulla da fare, come ti avevo già detto nel post precedente prima compare 
l'errore poi VS si ferma sul breakpoint del converter che ovviamente 
contiene la data.
Ciao e grazie
Giovanni