2013-02-22 42 views
0

我有一个WCF客户端,我需要将DTO放入BindingSource,但是当我尝试将过滤器应用于BindingSource时,它不会像neather List或BindingList一样工作,因为它们都会为IBindingListView.SupportsFiltering返回false。我需要返回哪些集合来支持WCF中的筛选?

我需要什么样的数据类型来使用,以便能够在我的列表过滤器?

代理DTO:

namespace MyApp.DataContracts 
{ 
    [System.Runtime.Serialization.DataContractAttribute(Name = "ServerSetupDTO", Namespace = "http://example.com/MyApp")] 
    [System.SerializableAttribute()] 
    public partial class ServerSetupDTO : object, System.Runtime.Serialization.IExtensibleDataObject 
    { 
     [System.Runtime.Serialization.DataMemberAttribute()] 
     public System.ComponentModel.BindingList<MyApp.DataContracts.DatabaseInfo> GenericPreconfigs 
     { 
      //(Snip) 
     } 

     //(Snip) 
    } 

    [System.Runtime.Serialization.DataContractAttribute(Name = "DatabaseInfo", Namespace = "http://example.com/MyApp")] 
    [System.SerializableAttribute()] 
    public partial class DatabaseInfo : object, System.Runtime.Serialization.IExtensibleDataObject 
    { 
     [System.Runtime.Serialization.DataMemberAttribute()] 
     public string AllowedServer 
     { 
      //(Snip) 
     } 

     //(Snip) 
    } 
} 

应用滤镜:

ServerSetupDTO serverSetupDTO = proxyClient.GetServerSetup(); 
bsServerSettings.DataSource = serverSetupDTO ; 

bsPreconfigList.DataMember = "GenericPreconfigs"; 
bsPreconfigList.DataSource = bsServerSettings; 

//This filter never gets applied, bsPreconfigList.SupportsFiltering is false. 
bsPreconfigList.Filter = String.Format("AllowedServer = '{0}'", cmbHost.Text); 

回答

0

撕裂了我的头发,我决定只是做一个ToDataSet功能,因为我从来没有需要更新的值之后。

public partial class ServerSetupDTO 
{ 
    public DataSet ToDataSet() 
    { 

     var setupDataSet = new DataSet("ServerSetup"); 

     //Get the demos 
     var demoPreconfigsTable = setupDataSet.Tables.Add("DemoPreconfigs"); 
     demoPreconfigsTable.Columns.Add("AllowedServer"); 
     demoPreconfigsTable.Columns.Add("SqlInstance"); 
     demoPreconfigsTable.Columns.Add("DatabaseName"); 
     this.DemoPreconfigs.ForEach(item => demoPreconfigsTable.Rows.Add(item.AllowedServer, item.SqlInstance, item.DatabaseName)); 

     //Get the preconfigs 
     var genericPreconfigsTable = setupDataSet.Tables.Add("GenericPreconfigs"); 
     genericPreconfigsTable.Columns.Add("AllowedServer"); 
     genericPreconfigsTable.Columns.Add("SqlInstance"); 
     genericPreconfigsTable.Columns.Add("DatabaseName"); 
     this.GenericPreconfigs.ForEach(item => genericPreconfigsTable.Rows.Add(item.AllowedServer, item.SqlInstance, item.DatabaseName)); 

     //Get the servers 
     var sqlServersTable = setupDataSet.Tables.Add("SqlServers"); 
     sqlServersTable.Columns.Add("ServerName"); 
     this.SqlServers.ForEach(item => sqlServersTable.Rows.Add(item)); 

     //Get the VM's 
     var virtualMachinesTable = setupDataSet.Tables.Add("VirtualMachines"); 
     virtualMachinesTable.Columns.Add("MachineName"); 
     this.VirtualMachines.ForEach(item => virtualMachinesTable.Rows.Add(item)); 

     return setupDataSet; 
    } 
} 

然后我就更新我的一行代码这个

bsServerSettings.DataSource = Program.ServerSettings.ToDataSet(); 
相关问题