none
关于Datagrid遍历的问题 在线等 RRS feed

  • 问题


  •             for (int i = 0; i < grdMaster.Items.Count; i++)
                {
                    DataRowView drv = (DataRowView)grdMaster.Items[i];
                    DataGridRow dgr = (DataGridRow)grdMaster.ItemContainerGenerator.ContainerFromItem(drv);
                }

    一个很简单的遍历Datagrid代码,为什么有的时候datagridrow会取到null?而且每次null的时候i的值还不一样,好奇怪。。
    用containerfromindex也一样
    • 已编辑 iammac 2010年3月11日 2:04
    2010年3月11日 1:54

答案

  • 有时如果加入了数据模板的话,不一定能每一次都能取得到的。你可以偿试用这种方法。
            public static T GetTemplatedAncestor<T>(FrameworkElement element) where T : FrameworkElement
            {
                if (element is T)
                {
                    return element as T;
                }

                FrameworkElement templatedParent = element.TemplatedParent as FrameworkElement;
                if (templatedParent != null)
                {
                    return GetTemplatedAncestor<T>(templatedParent);
                }

                return null;
            }
    2010年3月15日 3:10

全部回复

  • 补充一下,每次DataRowView drv = (DataRowView)grdMaster.Items[i]; 这个都能取到,就是不能取到它的DataGridRow。。有什么好的办法?
    2010年3月11日 1:58
  • 楼主,
    你可以发一个repro的sample给我们看一看吗?


    Jim Zhou -MSFT
    2010年3月14日 12:49
    版主
  • 有时如果加入了数据模板的话,不一定能每一次都能取得到的。你可以偿试用这种方法。
            public static T GetTemplatedAncestor<T>(FrameworkElement element) where T : FrameworkElement
            {
                if (element is T)
                {
                    return element as T;
                }

                FrameworkElement templatedParent = element.TemplatedParent as FrameworkElement;
                if (templatedParent != null)
                {
                    return GetTemplatedAncestor<T>(templatedParent);
                }

                return null;
            }
    2010年3月15日 3:10