none
DataGridの余計な列を削除したい RRS feed

  • 質問

  • DataGridの最後に表示される余計な列を削除させたいです。

    余計な行は、CanUserAddRowsプロパティをFalseにすれば可能でしたが・・

    方法をご存知の方がいらっしゃったら、教えていただきたいです。

    2013年10月28日 9:08

回答

  • こんな?

    <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="false" Margin="10" 
                Background="Transparent" ><!-- テーマによってはヘッダ列の背景が残って見えるから背景色を透明にしてみる -->
        <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridColumnHeadersPresenter}"  >
                <Setter Property="HorizontalAlignment" Value="Left" />
            </Style>
            <Style TargetType="{x:Type DataGridCellsPresenter}"  >
                <Setter Property="HorizontalAlignment" Value="Left" />
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Header="分析結果" Binding="{Binding Path=V1}" Width="100"/>
            <DataGridTextColumn Header="選択" Binding="{Binding Path=V2}" Width="50"/>
        </DataGrid.Columns>
    </DataGrid>


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク sasagaki 2013年10月29日 2:33
    2013年10月28日 9:48
  •  DataGridのWidth="*"も試してみたのですが、

     Gridとは異なって、”*"を受け付けませんでした。

    おかしいですね。gekkaさんのコードを借りれば、次のようにすれば少なくとも動くはずです。(未検証ですが)

    <DataGrid.Columns>
        <DataGridTextColumn Header="分析結果" Binding="{Binding Path=V1}" Width="100"/>
        <DataGridTextColumn Header="選択" Binding="{Binding Path=V2}" Width="*"/>
    </DataGrid.Columns>


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


    • 編集済み trapemiyaModerator 2013年10月29日 2:59 コード行頭の空白を削除
    • 回答としてマーク sasagaki 2013年10月30日 6:13
    2013年10月29日 2:58
    モデレータ
  • ご確認、ありがとうございました。*(アスタリスク)については以下のページが参考になると思います。
    #日本語で良い説明をしているところを見つけられませんでした。ごめんなさい。

    What does * (asterisk) mean in a WPF ColumnDefinition?
    http://stackoverflow.com/questions/6956832/what-does-asterisk-mean-in-a-wpf-columndefinition


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク sasagaki 2013年10月31日 0:08
    2013年10月30日 8:00
    モデレータ

すべての返信

  • こんな?

    <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="false" Margin="10" 
                Background="Transparent" ><!-- テーマによってはヘッダ列の背景が残って見えるから背景色を透明にしてみる -->
        <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridColumnHeadersPresenter}"  >
                <Setter Property="HorizontalAlignment" Value="Left" />
            </Style>
            <Style TargetType="{x:Type DataGridCellsPresenter}"  >
                <Setter Property="HorizontalAlignment" Value="Left" />
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Header="分析結果" Binding="{Binding Path=V1}" Width="100"/>
            <DataGridTextColumn Header="選択" Binding="{Binding Path=V2}" Width="50"/>
        </DataGrid.Columns>
    </DataGrid>


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク sasagaki 2013年10月29日 2:33
    2013年10月28日 9:48
  • 最終的にどういう形になれば良いのかわからないのですが、例えば、列「選択」のWithを、With="*"ではダメでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年10月29日 0:35
    モデレータ
  • ご返信ありがとうございました。

    gekkaさま

     XAMLで動作確認したところ、横の列が消えておりました。

      XAMLだけでできるとは思いませんでした。

     ご丁寧にソースまで頂き、ありがとうございました。

    trapemiyaさま

     DataGridのWidth="*"も試してみたのですが、

     Gridとは異なって、”*"を受け付けませんでした。

     ご回答ありがとうございました。


    • 編集済み sasagaki 2013年10月29日 2:33
    2013年10月29日 2:30
  •  DataGridのWidth="*"も試してみたのですが、

     Gridとは異なって、”*"を受け付けませんでした。

    おかしいですね。gekkaさんのコードを借りれば、次のようにすれば少なくとも動くはずです。(未検証ですが)

    <DataGrid.Columns>
        <DataGridTextColumn Header="分析結果" Binding="{Binding Path=V1}" Width="100"/>
        <DataGridTextColumn Header="選択" Binding="{Binding Path=V2}" Width="*"/>
    </DataGrid.Columns>


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


    • 編集済み trapemiyaModerator 2013年10月29日 2:59 コード行頭の空白を削除
    • 回答としてマーク sasagaki 2013年10月30日 6:13
    2013年10月29日 2:58
    モデレータ
  • trapemiyaさま

     ご回答ありがとうございました。

     ご指摘の通り、確かにGekka様のコードに、DataGridTextColumnに*を設定すると、動作いたしました。

     私が作成したコードでは*を設定すると、エラーになっております。

     何が悪いのか現在調査中ですが、誤った回答をして申し訳ありませんでした。

    2013年10月30日 6:13
  • trapemiyaさま

     *が原因でエラーになっていたわけではなく、別のところでコーディングが誤っていることが原因でした。

     申し訳ありませんでした。


    2013年10月30日 6:45
  • ご確認、ありがとうございました。*(アスタリスク)については以下のページが参考になると思います。
    #日本語で良い説明をしているところを見つけられませんでした。ごめんなさい。

    What does * (asterisk) mean in a WPF ColumnDefinition?
    http://stackoverflow.com/questions/6956832/what-does-asterisk-mean-in-a-wpf-columndefinition


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク sasagaki 2013年10月31日 0:08
    2013年10月30日 8:00
    モデレータ