我有一个DataGridView
我绑定BindingSource
。
问题是,当我对它进行过滤时,它不起作用。
是否需要在BndingSource Filter
上添加DataSource
,DataSource
为DataTable
。
现在,它是jst的一个Object列表,但我可以返回一个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 :(得分:1)
DataGridView
只能处理一组2D信息(即一个DataTable
)。虽然依赖Binding
变量(实际上,MSDN推荐)并不坏,但实际情况是DataGridView只与其中一个DataTable相关(如果有多个DataTable)在绑定源中,您必须通过DataSource
属性指定要成为DataMember
的那个。
因此,在考虑绑定源的情况下,您在DataSource中要进行的任何更改都必须在给定的DataTable中完成;因此,您正在观察的行为是预期的行为。