2012-11-05 21 views
0

如何訪問DataGridTemplateColumn中的所有堆棧面板?如何訪問DataGridTemplateColumn中的所有堆棧面板

我使用這個代碼:在數據網格

  <DataGrid HeadersVisibility="None" Name="dgUser" Grid.Row="0" Grid.Column="0" AutoGenerateColumns="False" ItemsSource="{Binding}" 
CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="False"> 
           <DataGrid.Columns> 
            <DataGridTemplateColumn Width="*" Header="" IsReadOnly="True"> 
             <DataGridTemplateColumn.CellTemplate> 
              <DataTemplate> 
               <StackPanel Orientation="Horizontal" Margin="10,0,0,0" Grid.Column="0" Name="spGuns"> 
                <TextBlock Margin="0,0,5,0" Text="Count"/> 
                <TextBox Margin="0,0,5,0" MinWidth="50" Width="Auto" Name="txtCount" Text="{Binding Count}"/> 
                <TextBlock Margin="0,0,5,0" Text="NameEn"/> 
                <TextBox Margin="0,0,5,0" MinWidth="50" Width="Auto" Name="txtGunNameEn" Text="{Binding NameEn}"/> 
               </StackPanel> 
              </DataTemplate> 
             </DataGridTemplateColumn.CellTemplate> 
            </DataGridTemplateColumn> 
           </DataGrid.Columns> 
          </DataGrid> 

數據:

http://www.imagetoo.com/?v=untitlfif.png

如何訪問所有的堆棧面板DataGridTemplateColumn?

+0

沒有答案的每一行?.... – user1799345

回答

0

像這樣在「x:Name」中更改StackPanel的屬性「Name」 <StackPanel Orientation="Horizontal" Margin="10,0,0,0" Grid.Column="0" x:Name="spGuns"> <TextBlock Margin="0,0,5,0" Text="Count"/> <TextBox Margin="0,0,5,0" MinWidth="50" Width="Auto" Name="txtCount" Text="{Binding Count}"/> <TextBlock Margin="0,0,5,0" Text="NameEn"/> <TextBox Margin="0,0,5,0" MinWidth="50" Width="Auto" Name="txtGunNameEn" Text="{Binding NameEn}"/> </StackPanel> 您的StackPanel將以編程方式提供。

+0

如何訪問? – user1799345

+0

no available ..... – user1799345

+0

@ user1799345經過一番搜索之後,似乎控制程序對數據模板元素的唯一方法就是從後面創建:http://stackoverflow.com/questions/8097349/change-label-content-programmatically-from-within-a-datate-template-used-in-a-dat http://social.msdn.microsoft.com/forums/en-US/wpf/thread/f230804d-fc0f -4321-a61e-69a2c890b28d / – PascalPEREZNET

0

添加此類經歷dataDrid

public IEnumerable<DataGridRow> GetDataGridRows(DataGrid grid) 
    { 
     var itemsSource = grid.ItemsSource as IEnumerable; 
     if (null == itemsSource) yield return null; 
     foreach (var item in itemsSource) 
     { 
      var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; 
      if (null != row) yield return row; 
     } 
    } 

然後你的問題是要找到控制解決

foreach (DataGridRow row in GetDataGridRows(dgUser)) 
     { 
      if (row.IsEnabled) 
      { 
       try 
       { 
        ContentPresenter cp = dgUser.Columns[i].GetCellContent(row) as ContentPresenter; 
        DataTemplate myDataTemplate = cp.ContentTemplate; 
        TextBox t = (TextBox)myDataTemplate.FindName("textBoxName", cp); 
        t.Text = //Do something 
       } 
       catch (Exception) 
       { } 
      } 
     }