0

how to access all stack panel in DataGridTemplateColumn?

I'm using this code :

           <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>

data in datagrid :

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

how to access all stack panel in DataGridTemplateColumn?

4

2 回答 2

0

像这样在“x:Name”中更改您的 StackPanel 的属性“名称” <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 将以编程方式可用。

于 2012-11-05T07:47:21.283 回答
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 回答