2010-06-21 2 views
0

Я имеющая массу неприятностей получать ObjectDataProvider работу с параметрами метода. Теперь со следующим кодом я могу просмотреть данные в дизайне визуальной студии XAML, однако, как только я попытаюсь обновить ObjectDataProvider, мои данные исчезнут. Я установил поставщик данных объекта с пятью параметрами, хотя они не передаются в запрос набора данных, я просто хочу проверить, могу ли я сначала передать эти параметры. Я запускаю метод фильтра внизу, чтобы обновить OBJDataProvider, и мой datagrid не работает?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> 

сетку данных, и это связывание с Поставщиком данных объекта

<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 для L 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

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

Спасибо, это хорошая помощь. Хотя мой datagrid все еще пуст, как только я вызываю метод filter_btn_Click. – wonea

+0

@wonea: Если вы посмотрите на dataset.eventlog в отладчике во время вызова GetLog2, есть ли у него данные? – Quartermeister

+0

Да, я могу видеть внутри sitelist_dataobj в режиме отладки, и данные можно просмотреть; sitelist_dataobj.ObjectInstance.dataset.eventlog – wonea

Смежные вопросы