所以,我将我的BindingSource的DataSource设置为具有DataRelation的DataSet的DefaultViewManager。然后我将BindingSource设置为UltraGrid的DataSource,然后将RowFilter应用于“SalesOrderSublines”DataView。
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以外的其他内容来确定是否应该隐藏顶级行,但是我被卡住了。任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:0)
您可以简单地比较已过滤的子行数与总计数的数量,而不是依赖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();
}
只要我们没有谈论大量的记录,那么表现应该很好吗?
答案 1 :(得分:0)
在网格中使用过滤可能是一种选择,而不是在DataSource中使用过滤。以下资源有关于实现此目的的更多详细信息:
http://forums.infragistics.com/forums/t/51892.aspx
http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.aspx?ArticleID=7703