来源:http://www.cnblogs.com/zjl880/archive/2010/08/10/1796573.html
网上许多例子都是在前台XAML代码中指定queryname,如何根据传入的参数不同,动态指定查询方法呢,带着这个疑问,也是项目需要,最终从国外一个网站(也可能是我的搜索关键字不准,有写过这方面资料的人不要向我扔砖头呀*_*)找了个例子,加以改进,最终呈现在大家面前。
1、前台XAML,DomainDataSource定义代码,不指定queryname
< my2:DomainDataSource.DomainContext >
< ria:TestDomainContext ></ ria:TestDomainContext >
</ my2:DomainDataSource.DomainContext >
< my2:DomainDataSource.SortDescriptors >
< my2:SortDescriptor PropertyPath ="ID" Direction ="Descending" ></ my2:SortDescriptor >
</ my2:DomainDataSource.SortDescriptors >
</ my2:DomainDataSource>
2、后台代码如下,根据查询需求不同,传入不同的参数,查询方法也是动态指定
private void LoadPersonRecord( string orgCode, string key)
{
try
{
if ( ! key.Equals( string .Empty))
{
this .testDomainContext = this .myDataSource.DomainContext as TestDomainContext;
this .testDomainContext.PersonLists.Clear();
// 查询参数清空,一定要放在QueryName前边,不然会出错
this .myDataSource.QueryParameters.Clear();
this .myDataSource.QueryName = " GetPersonListByNameQuery " ;
var p = new Parameter();
p.ParameterName = " orgCode " ;
p.Value = orgCode;
this .myDataSource.QueryParameters.Add(p);
p = new Parameter();
p.ParameterName = " key " ;
p.Value = key;
this .myDataSource.QueryParameters.Add(p);
this .myDataSource.Load();
}
}
catch (Exception exc)
{
this .ControlEnabled( true );
MessageBox.Show( " 查询时出错,错误提示: " + exc.Message, " 提示 " , MessageBoxButton.OK);
}
}
private void LoadPersonRecordByOrgCode(Int64 code)
{
try
{
this .testDomainContext = this .myDataSource.DomainContext as TestDomainContext;
this .testDomainContext.PersonLists.Clear();
// 查询参数清空,一定要放在QueryName前边,不然会出错
this .myDataSource.QueryParameters.Clear();
this .myDataSource.QueryName = " GetPersonListQuery " ;
var p = new Parameter();
p.ParameterName = " orgCode " ;
p.Value = code.ToString();
this .myDataSource.QueryParameters.Add(p);
this .myDataSource.Load();
}
catch (Exception exc)
{
this .ControlEnabled( true );
MessageBox.Show( " 查询时出错,错误提示: " + exc.Message, " 提示 " , MessageBoxButton.OK);
}
}
private void myDataSource_LoadedData(object sender, LoadedDataEventArgs e)
{
if (e.HasError)
{
System.Windows.MessageBox.Show(e.Error.ToString());
e.MarkErrorAsHandled();
}
else
{
List<PersonList> result = this.testDomainContext.PersonLists.ToList<PersonList>();
PagedCollectionView pcv = new PagedCollectionView(result);
pcv.PageSize = 40; //每页显示40条数据
this.myGrid.ItemsSource = pcv;
}
}
觉得有用的顶一下呀,呵呵