0

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>

datagridのデータ:

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

DataGridTemplateColumnのすべてのスタックパネルにアクセスする方法は?

4

2 に答える 2

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)
                { }
            }
        }
于 2013-09-24T06:52:21.320 に答える