none
DataGridの変わりにListViewのGridViewを使ってはみたものの RRS feed

  • 質問

  • お世話になっております。
    ご相談があり質問させて頂きます。

    ListViewのGridViewで下記の事をやろうとしてみましたが色々調べてみましたがわかりませんでした。
    ・列幅を変更できないように固定する
    ・チェックボックスの列を作る

    ご存知の方教えて頂ければ幸いです。

    アプリケーションを開発してこられた方なら
    たいていはDataGridViewをご利用になってきたかと思いますが
    xamlではどうやらできないというか標準でないようで。
    (一応はXceed DataGrid for WPFなるものがあるようですがちょっとこれの仕様に惑わされそうなので)

    なので、ListViewのGridViewでいけるかと思い色々とやってみました。
    まず、ヘッダーの色を変えるだけでもリソースに記述してから
    それを呼び出すといった方法になるようですね。
    http://msdn.microsoft.com/ja-jp/library/system.windows.controls.gridview.columnheadercontainerstyle(VS.80).aspx

    特にめんどくさいことをやろうとしてわけではなく
    表を出したいだけです。(チェックボックスはちょっとめんどくさい部類に入るかもしれないですが)

    もっとそれぐらいならこんな方法もあるよといった方法をご存知の方
    いらっしゃいましたら、そちらも教えて頂ければ幸いです。


    2009年3月26日 23:32

回答

  •  列幅の固定は以下の例があります。

    ListView のカラムヘッダの幅を固定する
    http://frog.raindrop.jp/knowledge/archives/002153.html

    チェックボックスについては以下が参考になると思います。

    方法 : CheckBox を持つ ListViewItem を作成する
    http://msdn.microsoft.com/ja-jp/library/ms754143.aspx

    参考までですが、ヘッダーの色を変更するには以下のようにしてもできます。各列それぞれ独立して背景色を変更できます。

    <GridViewColumn DisplayMemberBinding="{Binding hoge}">  
        <GridViewColumnHeader Content="hogehoge" Background="Aqua" /> 
    </GridViewColumn> 





    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク 無限極限 2009年3月28日 0:29
    2009年3月27日 1:17
    モデレータ
  • ListView のカラムヘッダの幅を固定する
     
    <Window  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        x:Class="WpfApplication3.Window1" 
        x:Name="Window" 
        Title="Window1" 
        Width="640" Height="480">  
      <Window.Resources> 
        <Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">  
          <Setter Property="IsEnabled" Value="false" /> 
        </Style> 
      </Window.Resources> 
     
        <Grid x:Name="LayoutRoot">  
        <ListView Name="listView1">  
          <ListView.View> 
            <GridView> 
              <GridViewColumn Header="aaaaa" HeaderContainerStyle="{StaticResource myHeaderStyle}"/>  
              <GridViewColumn Header="bbbbb"/>  
            </GridView> 
          </ListView.View> 
        </ListView> 
      </Grid> 
    </Window> 


    GridViewのカラムヘッダーはグレー化しちゃいますが・・・

        <ListView Name="listView1">  
          <ListView.View> 
            <GridView> 
              <GridViewColumn> 
                <GridViewColumnHeader Content="aaaaa" IsEnabled="False"/>  
              </GridViewColumn> 
              <GridViewColumn Header="bbbbb"/>  
            </GridView> 
          </ListView.View> 
        </ListView> 
     

    こっちでもいいですね。

    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2009/12
    • 回答としてマーク 無限極限 2009年3月28日 0:29
    2009年3月27日 6:52

すべての返信

  •  列幅の固定は以下の例があります。

    ListView のカラムヘッダの幅を固定する
    http://frog.raindrop.jp/knowledge/archives/002153.html

    チェックボックスについては以下が参考になると思います。

    方法 : CheckBox を持つ ListViewItem を作成する
    http://msdn.microsoft.com/ja-jp/library/ms754143.aspx

    参考までですが、ヘッダーの色を変更するには以下のようにしてもできます。各列それぞれ独立して背景色を変更できます。

    <GridViewColumn DisplayMemberBinding="{Binding hoge}">  
        <GridViewColumnHeader Content="hogehoge" Background="Aqua" /> 
    </GridViewColumn> 





    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク 無限極限 2009年3月28日 0:29
    2009年3月27日 1:17
    モデレータ
  • ListView のカラムヘッダの幅を固定する
     
    <Window  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        x:Class="WpfApplication3.Window1" 
        x:Name="Window" 
        Title="Window1" 
        Width="640" Height="480">  
      <Window.Resources> 
        <Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">  
          <Setter Property="IsEnabled" Value="false" /> 
        </Style> 
      </Window.Resources> 
     
        <Grid x:Name="LayoutRoot">  
        <ListView Name="listView1">  
          <ListView.View> 
            <GridView> 
              <GridViewColumn Header="aaaaa" HeaderContainerStyle="{StaticResource myHeaderStyle}"/>  
              <GridViewColumn Header="bbbbb"/>  
            </GridView> 
          </ListView.View> 
        </ListView> 
      </Grid> 
    </Window> 


    GridViewのカラムヘッダーはグレー化しちゃいますが・・・

        <ListView Name="listView1">  
          <ListView.View> 
            <GridView> 
              <GridViewColumn> 
                <GridViewColumnHeader Content="aaaaa" IsEnabled="False"/>  
              </GridViewColumn> 
              <GridViewColumn Header="bbbbb"/>  
            </GridView> 
          </ListView.View> 
        </ListView> 
     

    こっちでもいいですね。

    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2009/12
    • 回答としてマーク 無限極限 2009年3月28日 0:29
    2009年3月27日 6:52
  • trapemiyaさん、えムナウさん
    返信ありがとうございます。

    trapemiyaさんの教えてくれた方法もあるのですね。
    何だか、わざわざ呼び出すといったやり方がしっくりこなかったので
    嬉しい限りです。

    えムナウさんの方法は
    無効化することによってその副産物として固定できるということですね。
    なるほど、ちょっと知恵を感じました。

    助かりました。
    2009年3月28日 0:28