Использование кнопок в столбце DataGrid, WPF

#wpf #vb.net #winforms

Вопрос:

Я конвертирую приложение Winforms в WPF и запускаю эту ошибку. В приложении winforms система загружает кнопки в представление сетки данных. Поскольку в wpf нет представления datagrid, я использовал datagrid. К сожалению, все это не работает. По какой-то странной причине, которую я не могу исправить, я не могу проверить, о чем я думал, я получаю странную ошибку displayindex. Мне было интересно, может ли кто-нибудь подсказать мне альтернативу тому, что используется в приложении winforms, или сказать, работает ли то, что я написал.

Код Winforms:

 Dim btn As New DataGridViewButtonColumn()
    dgBoorMachine.Columns.Add(btn)
    btn.HeaderText = "del"
    btn.Text = "X"
    btn.Name = "del"
    btn.UseColumnTextForButtonValue = True
    dgBoorMachine.Columns("del").Width = 30
 

Код WPF:

  <Grid ShowGridLines="True">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="560"/>
        <ColumnDefinition Width="425" />
        <ColumnDefinition Width="560" />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="156" />
        <RowDefinition Height="55.2" />
        <RowDefinition Height="89.6"/>
        <RowDefinition Height="332.8"/>
        <RowDefinition Height="217.6"/>
        <RowDefinition Height="1" />
        <RowDefinition Height="1" />
    </Grid.RowDefinitions>

    <DataGrid x:Name="dgSlijpMachine" Grid.Row="2" Grid.Column="1">
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button x:Name="btn1" Content="X" Click="btn1_Click"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid>

</Grid>
 

Комментарии:

1. «я получаю странную ошибку displayindex» — вы не можете получить ее из xaml. исправьте свой метод btn1_Click, скорее всего

Ответ №1:

Ошибка может быть вызвана тем, что вы пропускаетеСтолбцы> тег

вместо

 <DataGrid x:Name="dgSlijpMachine" Grid.Row="2" Grid.Column="1">
    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button x:Name="btn1" Content="X" Click="btn1_Click"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid>
 

это должно быть

 <DataGrid x:Name="dgSlijpMachine" Grid.Row="2" Grid.Column="1">
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button x:Name="btn1" Content="X" Click="btn1_Click"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
 

Теперь я точно не знаю, чего вы хотите достичь. Что это сделает, так это добавит столбец с кнопкой в каждую строку, которую вы добавляете в свою сетку данных, и ничего больше. Если вы действительно хотите заполнить свою сетку данных значениями, вам следует привязаться к источнику элементов сетки данных, например.

 <DataGrid x:Name="dgSlijpMachine" Grid.Row="2" Grid.Column="1" ItemsSource="{Binding MyItems}">
 

где myItems-это наблюдаемая коллекция или аналогичный тип.