WPF Datagrid未使用MethodParameters正确刷新
我在让ObjectDataProvider使用方法参数时遇到了很多麻烦。现在,通过下面的代码,我可以在XAML visual studio designer中查看数据,但是一旦我尝试刷新ObjectDataProvider,我的数据就会消失。我已经用五个参数设置了一个对象数据提供程序,虽然这些参数没有传递到dataset查询,但我只想看看是否可以首先传递这些参数。我运行底部的filter方法来刷新OBJDataProvider,我的datagrid变为空白 我的两个ObjectDataProviderWPF Datagrid未使用MethodParameters正确刷新,wpf,c#-4.0,wpfdatagrid,Wpf,C# 4.0,Wpfdatagrid,我在让ObjectDataProvider使用方法参数时遇到了很多麻烦。现在,通过下面的代码,我可以在XAML visual studio designer中查看数据,但是一旦我尝试刷新ObjectDataProvider,我的数据就会消失。我已经用五个参数设置了一个对象数据提供程序,虽然这些参数没有传递到dataset查询,但我只想看看是否可以首先传递这些参数。我运行底部的filter方法来刷新OBJDataProvider,我的datagrid变为空白 我的两个ObjectDataProvi
<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>
在这里,我遇到了一些问题,当我将sitestr传递给MethodParameter[0]时,它会立即跳转到LogDataProvider的GetLog2方法,而不接收其余的参数。。。然后我的数据网格变为空白:-(
每次更新任何参数时,它都应调用Refresh。如果要设置多个参数,则应使用使其等待完成:
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方法,我的datagrid就会变为空白。@wonea:如果在调用GetLog2期间查看调试器中的dataset.eventlog,它是否有数据?是的,我可以在调试模式下查看sitelist_DataObjective中的数据,并且可以在;sitelist_DataObjectInstance.dataset.event中查看数据日志被稍微欺骗了一下,我意识到是DATETIME方法参数导致了问题。所以我做了更多的工作,只是将它们作为字符串传递。现在工作得非常好。:-)虽然它以无声的方式失败很烦人,但我希望出现异常。
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;
}
}
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();
}
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;
}
}