【问题标题】:WPF Datagrid not refreshing properly with MethodParametersWPF Datagrid 无法使用 MethodParameters 正确刷新
【发布时间】:2010-06-21 11:01:14
【问题描述】:

我在让 ObjectDataProvider 与方法参数一起工作时遇到了很多麻烦。现在使用以下代码,我可以在 XAML Visual Studio 设计器中查看数据,但是一旦我尝试刷新 ObjectDataProvider,我的数据就会消失。我已经设置了一个带有五个参数的对象数据提供程序,虽然这些参数没有传递给数据集查询,但我只是想看看我是否可以先传递这些参数。我在底部运行过滤器方法以刷新 OBJDataProvider 并且我的数据网格变为空白?

我的两个 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>

数据网格及其与对象数据提供者的绑定

<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] 时,它会立即跳转到 LogDataProvider 的 GetLog2 方法,而没有接受其余参数......然后我的数据网格变为空白: -(

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();
}

【问题讨论】:

    标签: wpf c#-4.0 wpfdatagrid


    【解决方案1】:

    每次更新任何参数时,它都应该调用 Refresh。如果你要设置多个,你应该使用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;
        }
    }
    

    【讨论】:

    • 谢谢,这是一个很好的帮助。尽管我调用 filter_btn_Click 方法后我的数据网格仍然是空白的。
    • @wonea:如果你在调用GetLog2的过程中查看调试器中的dataset.eventlog,它有数据吗?
    • 是的,我可以在调试模式下看到 sitelist_dataobj 内部,并且可以在其中查看数据; sitelist_dataobj.ObjectInstance.dataset.eventlog
    • 有点作弊,我意识到是 DATETIME 方法参数导致了问题。所以我做了更多的工作,只是将它们作为字符串传递。现在工作得很好。 :-) 虽然它默默失败的方式很烦人,但我希望有一个例外。
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 2012-12-09
    • 2013-11-06
    • 2010-12-19
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多