FlexGrid for WPF 帮助文档
监控选择

一旦选择发生变化,可以是由于用户操作或者代码修改所引起,Grid将触发SelectionChanged事件,允许您处理新的选择结果。

例如,下面的代码可以监视选择并在选择更改时发送信息到控制台:

C#
拷贝代码
void _flex_SelectionChanged(object sender, CellRangeEventArgs e)
{
  CellRange sel = _flex.Selection;
  Console.WriteLine("selection: {0},{1} - {2},{3}",
      sel.Row, sel.Column, sel.Row2, sel.Column2);
  Console.WriteLine("selection content: {0}",
      GetClipString(_flex, sel));
}
static string GetClipString(C1FlexGrid fg, CellRange sel)
{
  var sb = new System.Text.StringBuilder();
  for (int r = sel.TopRow; r <= sel.BottomRow; r++)
  {
    for (int c = sel.LeftColumn; c <= sel.RightColumn; c++)
    {
      sb.AppendFormat("{0}\t", fg[r, c].ToString());
    }
    sb.AppendLine();
  }
  return sb.ToString();
}

一旦选择发生变化,代码将列举表示当前选择的CellRange的坐标。

同时它还使用GetClipString方法输出选择范围的内容,该方法遍历选择的项目并使用Grid的索引获取选择范围中每一个单元格的内容。关于索引,在本文档之前有所介绍。

请注意,GetClipString方法中的for循环使用单元格的TopRow,ButtomRow,LeftColumn以及RightColumn苏醒,而不是Row,Row2,Column以及Column2属性。

这是必须的,因为Row可能大于或者小于Row2,取决于用户如何执行该选择(在选择时向上或者向下拖拽鼠标)。

您可以很容易地通过Rows.GetDataItems方法从Selection中抽取大量有用的信息。该方法返回一个关联到一个CellRange的数据项的集合。一旦你有了这个集合,你可以使用LINQ进行提炼和总结有关选定项目的信息。

例如,可以考虑为一个绑定到Customer对象集合的Grid使用以下SelectionChanged事件处理的替代方案:

C#
拷贝代码
void _flex_SelectionChanged(object sender, CellRangeEventArgs e)
{
  // 获取选定范围内的客户对象
  var customers =
    _flex.Rows.GetDataItems(_flex.Selection).OfType<Customer>();

  // 使用LINQ从选中的客户对象集合中抽取信息
  _lblSelState.Text = string.Format(
    "{0} items selected, {1} active, total weight: {2:n2}",
    customers.Count(),
    (from c in customers where c.Active select c).Count(),
    (from c in customers select c.Weight).Sum());
}

注意,该代码使用OfType运算符将选中的数据项转换为Customer类型。一旦该步骤完成,代码将使用LINQ获取一个总数,一个“active”状态的客户数,以及选中客户的总权重。LINQ是完成这类工作的完美工具。它是灵活,富有表现力的,紧凑而且高效。

查看其它

 

 


产品网站:http://www.gcpowertools.com.cn  |  咨询热线:4006576008   |   ©2015 西安葡萄城