2011-11-01 58 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導出保留了格式,所以您可以獲得與屏幕上顯示的值完全相同的值!