したがって、BindingSourceのDataSourceをDataRelationを持つDataSetのDefaultViewManagerに設定しています。 RowFilterを "SalesOrderSublines" DataViewに適用する前に、BindingSourceをUltraGridのDataSourceとして設定します。 RowFilterを適用した後に子の行が表示されないUltragridRowを非表示にする
public void RefreshData()
{
var dataset = DataService.GetMillWorkOrders()
bindingSource1.DataSource = dataset.DefaultViewManager;
ultraGridSequences.SetDataBinding(bindingSource1, "", true, true);
var dvm = bindingSource1.DataSource as DataViewManager;
dvm.DataViewSettings["SalesOrderSublines"].RowFilter = "LINE_NO = 2;
}
public static DataSet GetMillWorkOrders()
{
DataSet ds = OracleHelper.ExecuteDataset(_connectionString, CommandType.StoredProcedure, SQL.GET_WORK_ORDERS);
ds.Tables[0].TableName = "WorkOrders";
ds.Tables[1].TableName = "SalesOrderSublines";
var dr = new DataRelation("WorkOrderSublines", ds.Tables["WorkOrders"].Columns["WORK_ORDER"], ds.Tables["SalesOrderSublines"].Columns["WORK_ORDER"]);
ds.Relations.Add(dr);
return ds;
}
はその後、UltraGridRowsが初期化されているように私は私のためのRowFilterの目に見える子行(「WorkOrderSublines」)を持っていない任意の親行(「WorkOrders」)を非表示にします。
private void ultraGridSequences_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e)
{
if (e.Row.Band.Key != "WorkOrders") return;
e.Row.Hidden = e.Row.ChildBands["WorkOrderSublines"].Rows.VisibleRowCount == 0;
}
のRowFilterは「WorkOrderSublines」の行に正しく動作しないものの、バンドのvisibleRowCountのをバンドまだゼロより大きいので、親行が隠されることはありません。私の推測では、ChildBandのVisibleRowCount以外のものを探して、トップレベルの行を隠すべきかどうかを判断したいと思っていますが、私は立ち往生しています。どんな助けでも大歓迎です。早めにありがとう。