WPF Datagrid не обновляется должным образом с MethodParameters - PullRequest
0 голосов
/ 21 июня 2010

У меня масса проблем с тем, чтобы ObjectDataProvider работал с параметрами метода.Теперь с помощью следующего кода я могу просматривать данные в конструкторе визуальной студии XAML, однако, как только я пытаюсь обновить 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], он сразу же переходит к методу GetLog2 LogDataProvider, не принимаяостальные параметры ... Тогда моя сетка данных станет пустой: - (

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

1 Ответ

0 голосов
/ 21 июня 2010

Он должен вызывать 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;
    }
}
...