2013-11-19 4 views
0

У меня есть DataGridView, который я связываю на BindingSource.Фильтр на BindingSource: DataSource должен быть DataTable

Дело в том, что если у меня есть фильтр, он не работает.

Это необходимо, чтобы добавить Filter на BndingSource DataSource, что DataSource является DataTable.

На данный момент это jst список объектов, но я могу вернуть DataTable.

Должен ли я изменить его или нет?

bindingSource1.DataSource = Echange.GetListEchange(contextExecution.ChaineConnexion, criteres); 

GetListEchange, верните список Echange.

Но с этим, фильтр не работает:

 bindingSource1.Filter = "ec.date_echange IS NULL"; 

Таким образом, это будет работать, если я возвращаю DataTable вместо этого? Надеюсь, я смогу использовать Filter, не возвращая DataTable, но если это необходимо, не проблема.

генерировать DataTable:

 vRequete += vFrom + " " + vWhere.Trim().TrimEnd("AND".ToCharArray()) + " " + vOrderBy; 

     vTable = vTarget.RenvoiOneTable(vRequete); 

RenvoieOneTable представляет собой способ обеспечения с помощью Oracle. Код:

public override DataTable RenvoiOneTable(string piRequest) 
     { 
      DataTable poDatable = null; 

      try 
      { 
       poDatable = ChargeDataSet(piRequest).Tables[0]; 
      } 
      catch (OracleException ThisException) 
      { 
       throw new BaseDonneesException(ThisException.Message); 
      } 
      catch (Exception ThisExcept) 
      { 
       throw new BaseDonneesException(ThisExcept.Message); 
      } 

      return poDatable; 
     } 

    public override DataSet ChargeDataSet(string piRequest) 
      { 
       DataSet poDataset = null; 

       try 
       { 
        //Ouverture de la connection 
        Connexion.Open(); 

        //Initialisation de la commande 
        Command.CommandType = CommandType.Text; 

        //Mise en place dans la variable po_datasets de l'identifiant et du 
        //dataset voulu 
        Command.CommandText = piRequest; 

        using (OracleDataAdapter vAdapter = new OracleDataAdapter(Command)) 
        { 
         poDataset = new DataSet(); 
         vAdapter.Fill(poDataset); 
        } 

       } 
       catch (OracleException ThisException) 
       { 
        throw new BaseDonneesException(ThisException.Message); 
       } 
       catch (Exception ThisExcept) 
       { 
        throw new BaseDonneesException(ThisExcept.Message); 
       } 
       finally 
       { 
        if (Connexion.State == ConnectionState.Open) 
        { 
         Connexion.Close(); 
        } 

       } 
       //Envoye du tableau de DataSet 
       return poDataset; 
      } 

спасибо.

+0

У вас есть столбец с именем 'ec.date_echange'? –

ответ

1

A DataGridView может обрабатывать только один набор двумерных данных (то есть один DataTable). Хотя неплохо полагаться на переменную Binding (на самом деле это рекомендуется MSDN), реальность такова, что DataGridView относится только к одному из своих DataTables (в случае наличия более одного в источнике привязки, чтобы указать тот, который вы хотите быть DataSource через свойство DataMember).

Таким образом, любые изменения, которые вы хотите сделать в DataSource, должны выполняться в заданном DataTable, в случае рассмотрения источника привязки; и, следовательно, поведение, которое вы наблюдаете, является ожидаемым.

+0

Затем все данные DataPropertyName моих столбцов должны иметь имя в dataTable? Я должен конкат (если захочу) в своей таблице данных, а не где-нибудь еще? О, странная проблема: почему мой dataGrid отображает 5 строк, в то время как моя dataTable имеет только 4 строки? –

+0

@ Зафод 5 строк, когда у вашего DataTable всего 4? Я полагаю, последний бланк? Если вы получаете в своем DataGridView любую (непустую) информацию, отсутствующую в данном DataTable, это, безусловно, было бы странно (если логически вы не добавляете эту информацию «вручную» в DataGridView). Не могли бы вы подробнее рассказать об этом? В идеале вы должны опубликовать свой код, в котором вы заполняете DataTable, подавая его переменной Binding и устанавливая это как DataSource DataGridView. – varocarbas

+0

Да, это пустая строка. Добавьте код, дающий мне dataTable. –

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