Скрыть UltragridRow, который не имеет видимых дочерних строк после применения RowFilter - PullRequest
0 голосов
/ 15 июля 2011

Итак, я устанавливаю DataSource моего BindingSource в DefaultViewManager DataSet, который имеет DataRelation. Затем я устанавливаю свой BindingSource в качестве источника данных UltraGrid перед применением RowFilter к представлению данных «SalesOrderSublines».

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, я хочу скрыть любую родительскую строку ("WorkOrders"), у которой нет видимых дочерних строк ("WorkOrderSublines") из-за моего RowFilter.

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 этой группы по-прежнему больше нуля, поэтому родительская строка никогда не скрывается. Я предполагаю, что я хочу искать что-то, кроме VisibleRowCount ChildBand, чтобы определить, должна ли быть скрыта строка верхнего уровня, но я застрял. Любая помощь будет принята с благодарностью. Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Использование фильтрации в сетке может быть вариантом, а не использование фильтрации в источнике данных.Следующие ресурсы содержат более подробную информацию о реализации этого:

http://forums.infragistics.com/forums/t/51892.aspx

http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.aspx?ArticleID=7703

0 голосов
/ 03 августа 2011

Вместо того, чтобы полагаться на VisibleRowCount, вы можете просто сравнить количество отфильтрованных дочерних строк и общее количество.

void ultraGridSequences_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e)
{
    if (e.Row.Band.Key != "WorkOrders") return;
    var sublinesBand = e.Row.ChildBands["WorkOrderSublines"] 
    e.Row.Hidden = sublinesBand.Rows.Count(row => row.IsFilteredOut) ==
                    sublinesBand.Rows.Count();
}

Должно быть хорошо с точки зрения производительности, пока мы не говорим об огромных количествахзаписи

...