2010-06-21 90 views
0

我有大量的麻烦获取ObjectDataProvider与方法参数一起工作。现在用下面的代码,我可以在XAML visual studio designer中查看数据,但是一旦我尝试刷新ObjectDataProvider,我的数据就会消失。我已经设置了一个包含五个参数的对象数据提供程序,虽然这些参数没有传递给数据集查询,但我只想查看是否可以先传递这些参数。我在底部运行过滤器方法来刷新OBJDataProvider,并且我的数据网格变为空白?WPF Datagrid无法正确刷新与MethodParameters

我的两个ObjectDataProviders

<ObjectDataProvider x:Key="LogDataProvider" ObjectType="{x:Type local:LogDataProvider}"/> 

<ObjectDataProvider x:Key="siteListContains" MethodName="GetLog2" ObjectType="{x:Type local:LogDataProvider}"> 
    <ObjectDataProvider.MethodParameters> 
     <s:String>Red</s:String> 
     <s:DateTime>12:14:24</s:DateTime> 
     <s:DateTime>2008-01-01</s:DateTime> 
     <s:DateTime>12:12:12</s:DateTime> 
     <s:DateTime>2008-01-01</s:DateTime> 
    </ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

的DataGrid和它绑定到对象数据提供

<dg:DataGrid Name="log_datagrid" Height="230" VerticalAlignment="Stretch" 
DataContext="{Binding Source={StaticResource siteListContains}}" 
ItemsSource="{Binding}" AutoGenerateColumns="True"/> 

我LogDataProvider类

public class LogDataProvider 
{ 
    private eventlogTableAdapter adapter; 
    DataSet1 dataset; 

    public LogDataProvider() 
    { 
     dataset = new DataSet1(); 
     adapter = new eventlogTableAdapter(); 
    } 

    public DataView GetLog2(string sitestr, DateTime fromtimestr, DateTime fromdatestr, DateTime totimestr, DateTime todatestr) 
    { 
     adapter.Fill(dataset.eventlog); 
     return dataset.eventlog.DefaultView; 
    } 
} 

在这里,我遇到了问题,当我将sitestr传递给MethodParameter [0],它立即跳转到L的GetLog2方法ogDataProvider,没有考虑在其余参数......然后,我的DataGrid中一片空白:-(

private void filter_btn_Click(object sender, RoutedEventArgs e) 
{ 
    ObjectDataProvider sitelist_dataobj = this.FindResource("siteListContains") as ObjectDataProvider; 
    sitelist_dataobj.MethodParameters[0] = sitestr.Text.ToString(); 
    sitelist_dataobj.MethodParameters[1] = from_timePicker.SelectedTime; 
    sitelist_dataobj.MethodParameters[2] = from_datepicker.SelectedDate; 
    sitelist_dataobj.MethodParameters[3] = to_timePicker.SelectedTime; 
    sitelist_dataobj.MethodParameters[4] = to_datepicker.SelectedDate; 

    sitelist_dataobj.Refresh(); 
} 

回答

0

应该叫刷新每次更新任何参数的时间。如果您要设置多个,则应使用DeferRefresh使其等待,直至完成:

private void filter_btn_Click(object sender, RoutedEventArgs e) 
{ 
    ObjectDataProvider sitelist_dataobj = this.FindResource("siteListContains") as ObjectDataProvider; 
    using (sitelist_dataobj.DeferRefresh()) 
    { 
     sitelist_dataobj.MethodParameters[0] = sitestr.Text.ToString(); 
     sitelist_dataobj.MethodParameters[1] = from_timePicker.SelectedTime; 
     sitelist_dataobj.MethodParameters[2] = from_datepicker.SelectedDate; 
     sitelist_dataobj.MethodParameters[3] = to_timePicker.SelectedTime; 
     sitelist_dataobj.MethodParameters[4] = to_datepicker.SelectedDate; 
    } 
} 
+0

谢谢,这是一个很好的帮助。尽管我调用filter_btn_Click方法后,我的数据网格仍然空白。 – wonea 2010-06-21 12:21:37

+0

@wonea:如果您在调用GetLog2的过程中查看调试器中的dataset.eventlog,它是否有数据? – Quartermeister 2010-06-21 12:40:12

+0

是的,我可以在调试模式下看到sitelist_dataobj,并且数据可以在中查看; sitelist_dataobj.ObjectInstance.dataset.eventlog – wonea 2010-06-21 13:25:38