FlexGrid for WPF 帮助文档
通过代码选择单元格和对象

Selection属性是可读写的,所以你可以使用代码选择单元格范围。您还可以使用Select方法进行选择,就像在WinForms版本的C1FlexGrid控件那样。Select方法允许您选择单元格或范围,并可选地滚动新的选择范围到可视视图,以便用户可以看到它。

例如,为了选中Grid的第一个单元格并确保它位于用户可见范围,应使用以下代码:

C#
拷贝代码
// 选择第零行,第零列,并确保该单元格可见
fg.Select(0, 0, true);

选择相关的方法均基于行和列的索引进行工作。但是您也可以用来基于单元格内容进行选择。例如,以下代码选择在Grid的“Name”列中,第一个包含指定字符串的行。

C#
拷贝代码
bool SelectName(string name)
{
  // 在“Name”列查找包含指定字符串的行
  int col = _flexGroup.Columns["Name"].Index;
  int row = FindRow(_flex, name, _flex.Selection.Row, col, true);
  if (row > -1)
  {
    _flex.Select(row, col);
    return true;
  }
  // 未查询到…… 
  return false;
}

该代码使用的FindRow辅助方法定义如下:

C#
拷贝代码
// 在一个指定的列中查找包含某个文本的行
int FindRow(C1FlexGrid flex, string text,
            int startRow, int col, bool wrap)
{
  int count = flex.Rows.Count;
  for (int off = 0; off <= count; off++)
  {
    // 搜索到底部且不允许循环查找?立即退出
    if (!wrap && startRow + off >= count)
    {
      break;
    }

    // 从行中获取文本
    int row = (startRow + off) % count;
    var content = flex[row, col];

    // 如果查找到匹配项则返回匹配行的索引
    if (content != null &&
        content.ToString().IndexOf(text,
        StringComparison.OrdinalIgnoreCase) > -1)
    {
      return row;
    }
  }

  // 未查询到…… 
  return -1;
}

该FindRow方法实现了在C1FlexGrid的WinForms版本中提供的FindRow方法的功能。此方法没有内置在Silverlight或WPF版本的Grid产品中,以使得控件所占用的尺寸尽可能的小。该方法在给定的列中搜索指定的字符串,从指定的行开始搜索,并可选地在搜索到末尾仍未查找到时返回到行首开始搜索。这在许多场景下已经具有足够的使用灵活性。

另一个常见的选择场景是在数据源中选择一个特定对象的情况。你的第一反应可能会查找并使用PagedCollectionView.IndexOf 方法从数据源集合中查找对象的索引,然后使用索引选择行。这种方法的问题是,它只有在数据没有进行分组时能够正常工作。如果已经将数据进行了分组,则分组行也将进行计数,这将导致数据源中的项目的索引和Grid中的行索引不匹配。

解决这种问题的最简单的方式是枚举每一行,并将您搜索的项目和每一行的DataItem属性进行比较。下面的代码演示了如何做到这一点:

C#
拷贝代码
var customer = GetSomeCustomer;

#if false // ** 千万不要使用这种方式,因为它将在存在分组的情况下无法正常工作

  int index = view.IndexOf(customer);
  if (index > -1)
  {
    _flex.Select(index, 0);
  }

#else // 这是在Grid中搜索对象的安全方式

  for (int row = 0; row <= _flex.Rows.Count; row++)
  {
    if (row.DataItem == customer)
    {
      _flex.Select(row, 0);
      break;
    }
  }
#endif
查看其它

 

 


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