0

UWPアプリケーションを開発しています。ここでは、以下のような表形式でデータを表示したいのですが、

ここに画像の説明を入力

ここでの目的は、アイテムを検索してこのグリッドに追加することです。グリッドにデータがない場合、丸みを帯びたボタン(赤い色はデータグリッドヘッダーテンプレートです)をクリックすると正常に動作しますが、その場合にグリッドにデータが含まれている場合、丸みを帯びた画像ボタンをクリックすると未処理の例外が発生します

ここに画像の説明を入力

ここに私が使用したコードを配置しています。

<controls:DataGrid x:Name="dgNewBill" Grid.Row="0" Grid.Column="0" MinHeight="500" HorizontalAlignment="Left" HeaderBackground="Black"  DefaultOrderIndex="1" Background="Black" RowBackgroundEvenBrush="Black" RowBackgroundOddBrush="Black" >
                                <controls:DataGrid.RowStyle>
                                    <Style TargetType="ListBoxItem">
                                        <Setter Property="Padding" Value="0"></Setter>
                                        <Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
                                    </Style>
                                </controls:DataGrid.RowStyle>

                                <controls:DataGrid.Columns>
                                    <controls:DataGridTextColumn Width="50" Binding="{Binding SNumber}" Foreground="White"
                     IsAscendingDefault="False" CanSort="False">
                                        <controls:DataGridTextColumn.Header>
                                            <Button x:Uid="RSNO" Height="40"  Width="50" HorizontalAlignment="Left" Style="{StaticResource RoundButtonTemplate}" Margin="-10,0,0,0"/>
                                        </controls:DataGridTextColumn.Header>
                                        <controls:DataGridTextColumn.Style>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="TextAlignment" Value="Center"></Setter>
                                            </Style>
                                        </controls:DataGridTextColumn.Style>
                                    </controls:DataGridTextColumn>

                                    <!--Item Column-->
                                    <controls:DataGridTextColumn Width="380" Binding="{Binding description}" Foreground="White" CanSort="False">
                                        <controls:DataGridTextColumn.Header>
                                            <Button x:Uid="RItem"  Height="40" Width="380"   Style="{StaticResource RoundButtonTemplate}"  Margin="-12,0,0,0"/>
                                        </controls:DataGridTextColumn.Header>
                                        <controls:DataGridTextColumn.Style>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="TextAlignment" Value="Center"></Setter>
                                            </Style>
                                        </controls:DataGridTextColumn.Style>
                                    </controls:DataGridTextColumn>
                                    <!--UOM column-->
                                    <controls:DataGridTextColumn Width="120" Binding="{Binding uom}" Foreground="White" CanSort="False">
                                        <controls:DataGridTextColumn.Header>
                                            <Button x:Uid="RUOM" Height="40" Width="120"  Style="{StaticResource RoundButtonTemplate}"  Margin="-12,0,0,0"/>
                                        </controls:DataGridTextColumn.Header>
                                        <controls:DataGridTextColumn.Style>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="TextAlignment" Value="Center"></Setter>
                                            </Style>
                                        </controls:DataGridTextColumn.Style>
                                    </controls:DataGridTextColumn>
                                    <!--Price Column-->
                                    <controls:DataGridTemplatedColumn>
                                        <controls:DataGridTemplatedColumn.Header>
                                            <Button x:Uid="RPrice" Height="40" Width="110"  Style="{StaticResource RoundButtonTemplate}"  Margin="-12,0,0,0"/>
                                        </controls:DataGridTemplatedColumn.Header>
                                        <controls:DataGridTemplatedColumn.CellTemplate>
                                            <DataTemplate>
                                                <StackPanel Name="pricePanel" Width="110" Height="30" Tapped="pricePanel_Tapped" >
                                                    <TextBlock Name="price" Foreground="White"  Text='{Binding price}' VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,5,0,0"></TextBlock>
                                                </StackPanel>
                                            </DataTemplate>
                                        </controls:DataGridTemplatedColumn.CellTemplate>
                                    </controls:DataGridTemplatedColumn>


                                     <!--Qty Column-->
                                    <controls:DataGridTemplatedColumn>
                                        <controls:DataGridTemplatedColumn.Header>
                                            <Button x:Uid="RQty" Height="40" Width="110"  Style="{StaticResource RoundButtonTemplate}"  Margin="-25,0,0,0"/>
                                        </controls:DataGridTemplatedColumn.Header>
                                        <controls:DataGridTemplatedColumn.CellTemplate>
                                            <DataTemplate>
                                                <StackPanel Name="quantityPanel" Width="50" Height="30" Tapped="quantityPanel_Tapped">
                                                    <TextBlock Name="quantity" Foreground="White"  Text='{Binding quantity}' VerticalAlignment="Center" Margin="0,5,0,0"></TextBlock>
                                                </StackPanel>
                                            </DataTemplate>
                                        </controls:DataGridTemplatedColumn.CellTemplate>
                                    </controls:DataGridTemplatedColumn>

                                    <!--Discount Column-->
                                    <controls:DataGridTemplatedColumn>
                                        <controls:DataGridTemplatedColumn.Header>
                                            <Button x:Uid="Rdiscount" Height="40" Width="60"  Style="{StaticResource RoundButtonTemplate}"  Margin="-25,0,0,0"/>
                                        </controls:DataGridTemplatedColumn.Header>
                                        <controls:DataGridTemplatedColumn.CellTemplate>
                                            <DataTemplate>
                                                <StackPanel Name="discountPanel" Width="60" Height="30" Tapped="discountPanel_Tapped" >
                                                    <TextBlock Name="Discount" Foreground="White" Text='{Binding discount}' VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,5,0,0"></TextBlock>
                                                </StackPanel>
                                            </DataTemplate>
                                        </controls:DataGridTemplatedColumn.CellTemplate>
                                    </controls:DataGridTemplatedColumn>

                                    <!--Cost Column-->
                                    <controls:DataGridTextColumn Width="110" Binding="{Binding cartTotal}" Foreground="White" CanSort="False" >
                                        <controls:DataGridTextColumn.Header>
                                            <Button x:Uid="RCartTotal" Height="40" Width="110"   Style="{StaticResource RoundButtonTemplate}"  Margin="-25,0,0,0"/>
                                        </controls:DataGridTextColumn.Header>
                                        <controls:DataGridTextColumn.Style>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="TextAlignment" Value="Center"></Setter>
                                            </Style>
                                        </controls:DataGridTextColumn.Style>
                                    </controls:DataGridTextColumn>

                                <!--void image column-->
                                    <controls:DataGridTemplatedColumn>
                                        <controls:DataGridTemplatedColumn.Header>
                                            <Button Name="Cancelbtn" Height="50" Click="Cancelbtn_Click" Width="55" >
                                                <Image Source="/Images/erase.png"  Name="ImgClearCartp" Height="40" Width="40" ></Image>
                                            </Button>
                                        </controls:DataGridTemplatedColumn.Header>
                                        <controls:DataGridTemplatedColumn.CellTemplate>
                                            <DataTemplate>
                                                <StackPanel Name="voidImagePanel" Width="50" Height="30" Tapped="voidImagePanel_Tapped" >
                                                    <Image Name="VoidImage" Source='{Binding imageUrl}' Height="20" Width="30" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5,0,0"></Image>
                                                </StackPanel>
                                            </DataTemplate>
                                        </controls:DataGridTemplatedColumn.CellTemplate>
                                    </controls:DataGridTemplatedColumn>
                                </controls:DataGrid.Columns>
                            </controls:DataGrid>

この例外を取得するDataGridTemplatedColumnを使用しているため、私はテストし、私の理解に従っています。しかし、私の範囲によれば、DataGridTextColumnの代わりに TemplateColumn を使用する必要があります。

そして、私はhttps://github.com/MyToolkit/MyToolkit/wiki/DataGridを使用しました

リンク。 この問題を解決するにはどうすればよいか教えてください。

4

1 に答える 1

1

この例外を取得する DataGridTemplatedColumn を使用しているため、私はテストし、私の理解に従っています。しかし、私の範囲によれば、DataGridTextColumn の代わりに TemplateColumn を使用する必要があります。

はい、この問題の 1 つの回避策は に置き換えるDataGridTemplatedColumnことDataGridTextColumnです。ただし、直接置き換えるよりも優れていると思われる他の 2 つの回避策があります。

  • 次のようにorderプロパティを追加できます。Order="{Binding imageUrl}"DataGridTemplatedColumn

    <controls:DataGridTemplatedColumn Order="{Binding imageUrl}">
    <controls:DataGridTemplatedColumn.Header>
        <Button Name="Cancelbtn"
                Width="55"
                Height="50"
                Background="Green"
                Click="Cancelbtn_Click">
            <Image Name="ImgClearCartp"
                   Width="40"
                   Height="40"
                   Source="Assets/cafee2.jpg" />
        </Button>
    </controls:DataGridTemplatedColumn.Header>
    <controls:DataGridTemplatedColumn.CellTemplate>
        <DataTemplate>
            <StackPanel Name="voidImagePanel"
                        Width="50"
                        Height="30"
                        Tapped="voidImagePanel_Tapped">
                <Image Name="VoidImage"
                       Width="30"
                       Height="20"
                       Margin="0,5,0,0"
                       HorizontalAlignment="Left"
                       VerticalAlignment="Center"
                       Source="{Binding imageUrl}" />
            </StackPanel>
        </DataTemplate>
    </controls:DataGridTemplatedColumn.CellTemplate>
    
  • 列を並べ替える必要がない場合は、次のようCanSort="False"に要素に を追加するだけです。DataGridTemplatedColumn

    <controls:DataGridTemplatedColumn  CanSort="False">
    ...
    </controls:DataGridTemplatedColumn.CellTemplate>
    

    MyToolkit からの例外の理由は、要素のorderプロパティDataGridTemplatedColumnが null 初期ですがpath、次の図に示すように、要素からパラメーターを取得するためです。この問題をMyToolKit の問題に送信して、MyToolKit チームに修正を依頼することもできます。

ここに画像の説明を入力

于 2016-06-07T10:03:30.103 に答える