2011-11-01 45 views
3

我对白色项目很陌生,我只是检查它的功能......在我的工作中,我密集处理了数据网格, 当列为DataGridTemplateColumn时,我无法获得datagrid单元格的值。白色UI自动化:获取WPF DataGrid单元格值?

它不适用于DataGridTemplateColumn,它适用于所有列类型。

我的DataGrid是因为:

<my:DataGrid AutoGenerateColumns="False" Margin="25,28,42,34" Name="dataGrid1" > 
     <my:DataGrid.Columns> 
      <my:DataGridTemplateColumn Header="Header" x:Name="koko" Width="200"> 
       <my:DataGridTemplateColumn.CellTemplate > 
        <DataTemplate > 
         <TextBlock Name="moko" Text="{Binding col1, Mode=OneWay,Converter={StaticResource fataGridHighlightConverter }}" ></TextBlock> 

        </DataTemplate> 
       </my:DataGridTemplateColumn.CellTemplate> 
       <my:DataGridTemplateColumn.CellEditingTemplate> 
        <DataTemplate> 
         <Grid x:Name="myEditGrid" Loaded="myEditGrid_Loaded"> 
         </Grid> 
        </DataTemplate> 
       </my:DataGridTemplateColumn.CellEditingTemplate> 
      </my:DataGridTemplateColumn> 
     </my:DataGrid.Columns> 
    </my:DataGrid> 

和我的测试是:

  [Test] 
    public void TestDatagrid5() 
    { 
     var tab = _win.Get<ListView>(SearchCriteria.ByAutomationId("dataGrid1")); 
     var count = tab.Rows.Count; 
     var row = tab.Rows[1]; 
     ListViewCell x = row.Cells[1]; //Always count = 0 :(
    } 

但细胞计数始终= 0,我需要得到单元格的值!?请任何帮助!

+0

您的DataGrid呈现? – Rachel

+0

是的!......... –

回答

0

我不喜欢这个答案,想找到这样做的更好的办法..

这就是说,如果你问ListViewRow项目在网格的元素,你可以再取UiAutomationElement创造那个元素的白色版本是你自己的。

[Test] 
public void TestDatagrid5() 
{ 
    var tab = _win.Get<ListView>(SearchCriteria.ByAutomationId"dataGrid1")); 

    var column = new List<string>(); 

    foreach (var r in tab.Rows) 
    { 
    var automationElement = r.GetElement(SearchCriteria.ByAutomationId("moko")); 

    var label = new Label(automationElement, new NullActionListener()); 

    column.Add(label.Text); 
    } 

    Assert.That(column, Is.EquivalentTo(new[] { "what", "is", "expected" })); 

} 
0

的foreach(在tab.Rows VAR R) { 变种automationElement = r.GetElement(SearchCriteria.ByAutomationId( “MOKO”));

var label = new Label(automationElement,new NullActionListener());

column.Add(label.Text); }

警示这种方法可能不适合让所有的行只是那些可见

0

我会建议身边的另一种方式工作。如果网格支持导出为CSV - 请改为使用它。这将为你节省数月的工作时间!如果只有我知道之前...

识别单元格和提取值可能很痛苦。许多网格控件都会进行UI虚拟化。不适合视口的单元格将不会被创建。你必须滚动网格来强制渲染。

我个人使用DevExpress网格。他们的CSV导出保留了格式,所以您可以获得与屏幕上显示的值完全相同的值!