locked
DataGrid内に表示されたCheckBox全てにチェックをつける方法とチェックをつけない方法について RRS feed

  • 質問

  • またまた初歩的?なご質問なのですが、
    DataGrid内に表示したチェックボックス全てにチェックをつける方法とチェックを外す方法を調べています。
    下記の通り、DataGridにXMLから取得したデータを表示し、最初の列を「data:DataGridCheckBoxColumn」にしています。
    その「data:DataGridCheckBoxColumn」全行に対して、チェックをつけるボタンとつけないボタンにて、
    チェックをつける処理とつけない処理をしたいのです。
    どなたか、お力をください。

        <data:DataGrid x:Name="dataGrid1" AutoGenerateColumns="False">
          <data:DataGrid.Columns>

            <data:DataGridCheckBoxColumn x:Name="dataG_HeaderSelect" Header="" Binding="{Binding chk_file_name}" CanUserResize="False" CanUserSort="False" IsReadOnly="False">
            </data:DataGridCheckBoxColumn>

            <data:DataGridTextColumn Header="図番" Binding="{Binding file_name}" CanUserResize="False" CanUserSort="True" IsReadOnly="True">
            </data:DataGridTextColumn>
            
          </data:DataGrid.Columns>
        </data:DataGrid>

    2009年11月20日 4:24

すべての返信

  • ItemsSourceにいれたコレクションをループして
    chk_file_nameをTrueにしていけばいいのではないでしょうか。

    主観ですがSilverlightのDataGridはView的な側面が強い気がするので
    データ主体で考えるといいと思いますよ。
    2009年11月20日 7:52
  • お世話様です。
    すみません。もう少し詳細に教えていただけないでしょうか?
    サンプルソースをいただけると、幸いです。
    以上、宜しくお願い致します。
    2009年11月24日 2:57
  • データ型等わからないので簡潔なものになりますが
    chk_file_nameというBoolean型のプロパティを持つ
    DataItemというクラスのコレクションをItemsSourceに入れていると仮定しましょう。
    -サンプル始-
    Dim itemlist As ObservableCollection(Of DataItem) = CType(dataGrid1.ItemsSource, ObservableCollection(Of DataItem))

    For Each item As DataItem In itemlist
        item.chk_file_name = True ' Trueでチェック、Falseで未チェック
    Next
    -サンプル終-
    これだけですよ。
    2009年11月24日 4:26
  • お世話様です。
    すみません。
    いただいたサンプルを下記に作成したイベントハンドラにコピーしたのですが、エラーが発生しました。

        Private Sub AllSelect(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
            Dim itemlist As ObservableCollection(Of DataItem) = CType(dataGrid1.ItemsSource, ObservableCollection(Of DataItem))

            For Each item As DataItem In itemlist
                item.chk_file_name = True ' Trueでチェック、Falseで未チェック
            Next
        End Sub

    <エラー内容>
    ObservableCollection(Of DataItem)」→「型 'ObservableCollection(Of DataItem)' が定義されていません。」
    DataItem」→「型 'DataItem' が定義されていません。」

    以上、Silverlight3でVB開発は初心者のため、ご教授をお願い致します。

    2009年11月24日 4:40
  • データ型等わからないので簡潔なものになりますが
    chk_file_nameというBoolean型のプロパティを持つ
    DataItemというクラスのコレクションをItemsSourceに入れていると仮定しましょう。
    ちゃんと読んで理解して頂けていないようですね。
    DataItemというのは私が勝手に書いているだけですので
    ビギナーズラックさんのプロジェクトで使用されているクラスに置き換えてください。

    ObservableCollection(Of T)はSystem.Collections.ObjectModelという名前空間にありますので
    Import文を書いたり名前空間を補うなりすればよいです。

    ということまで補完する必要があるあたりSilverlightだけでなく.NET言語での開発経験が無いように思われますので
    もしそうならば正直にそう言って頂いたほうが他のみなさんも(さらに)やさしく対応してくださるかもしれませんよ。
    2009年11月24日 5:49
  • お世話様です。
    いただきましたヒントを元に、下記のようにソース修正しました。

        Private Sub AllSelect(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
            MessageBox.Show("全て選択します。", "全選択", MessageBoxButton.OK)
            Dim itemlist As System.Collections.ObjectModel.ObservableCollection(Of myPersonalInfo_FromKeyWord_Tree) = CType(dataGrid1.ItemsSource, System.Collections.ObjectModel.ObservableCollection(Of myPersonalInfo_FromKeyWord_Tree))
            For Each item As myPersonalInfo_FromKeyWord_Tree In itemlist
                item.blnchk_file_name = True ' Trueでチェック、Falseで未チェック
            Next
        End Sub

    しかし、上記「AllSelect」関数を実行すると、WEB上で下記のエラーが発生し、うまく動きません。上記の部分で。
    このエラーは何を意味しているのでしょうか?

    <エラー内容>
    「型 'System.Collections.Generic.List`1[SilverlightApplication1.myPersonalInfo_FromKeyWord_Tree]' のオブジェクトを型 'System.Collections.ObjectModel.ObservableCollection`1[SilverlightApplication1.myPersonalInfo_FromKeyWord_Tree]' にキャストできません。」

    以上、本当に皆様申し訳ございません。ご教授をお願い致します。
    2009年11月25日 6:55
  • VBの基礎大丈夫ですか?
    DataGridのItemsSourceに、ビギナーズラックさんが代入した時の型が何か確認してください。

    nk9kさんの示してくれたサンプルコードは、ビギナーズラックさんが何の型を使用しているか
    情報を提示しない中で、ObservableCollection(Of XXXX)を使ってるだろうという仮定の上で
    書かれたものだと思います。
    なので、その部分の型は、ビギナーズラックさんがDataGridにデータを表示している所で
    ご自分で指定された型に読み替える必要があります。

    人のコードをコピペして継ぎはぎだらけのコードで大丈夫ですか?
    エラー処理は適切に入ってますか?
    特定の条件下でうまく動かないようなコードになってたりしませんか?
    非常に、これまでのスレッドのやり取りを見ていて不安になってきます。
    かずき Blog:http://blogs.wankuma.com/kazuki/
    2009年11月25日 7:18
  • お言葉ですが、わからないことを聞きたい、ということを投稿できないというルールのもとで、
    このサイトは運用されているのでしょうか?
    であれば、このサイトを運用する意味がないのかと?

    このサイトは、聞く側のあらを探すサイトですか?

    聞きたいことを素直に聞いて、文句を言われるのであれば、
    もうこのサイトは利用いたしません。

    大変にご迷惑をおかけしました。
    2009年11月25日 7:50
  • あなたは英語の先生にわからない英単語の意味を逐一聞いてきたのですか?
    ということです。

    かずきさんや他の方の応対は丁寧すぎると私には思えますがね。
    あなたがよりよい開発者になる為のアドバイスを「文句」と捉えるのなら
    とても残念なことです。

    今すぐパソコンを窓から投げ捨てて
    開発の会社に在籍しているなら辞表を書いて提出することを願っています。

    2009年11月25日 9:22
  • 単純に、どのていどVBをご存じなのか気になったのと、このエラーを
    潰しても解決するか疑問だったので、このあとも、ビギナーズラックさんと
    やりとりが続くと思ったので聞きました

    例えば、DataGridのItemsSourseがNothingだと、例外がでて
    ビギナーズラックさんの言うWEB上でエラーがでる状態になります。
    このケースに対応しないといけないかどうかは、処理の全体をみて
    判断しないといけないですが、これが出来るのは現状だと
    ビギナーズラックさんだけなので聞きました。

    ほかには、コードでTrueやFalseを指定しても、画面上のチェックボックスに
    結果が反映されない可能性があります。
    これは、ビギナーズラックさんの作ったmyPersonalInfo_FromKeyWord型の
    作りによって変わってきます。
    反映されない場合には、また対処が必要なのですが、VBの基本的な
    構文がわかってるなら
    INotifyPrqpertyChangedを実装して、blnchk_file_nameプロパティで
    PropertyChangedイベントを発行してください
    という返事で大丈夫ですけど、わからないなら参考サイトも併せて
    提示しないといけなかったりします。
    そのために、聞きました。

    あら探しをしてるわけではありません。
    不快に感じたのでしたら、申し訳ありません。
    もし、私の対応がゆるせないのでしたら、今後私は
    ビギナーズラックさんの質問に回答しないので
    引き続きここを利用していただければと思います。

    かずき Blog:http://blogs.wankuma.com/kazuki/
    2009年11月25日 10:11
  • はい。その通りです。
    わからないことをわかる方に逐一聞いて何が悪いのでしょうか?

    確かにみなさん丁寧に教えていただけています。それは大変に感謝しております。
    私がどのレベルなのか?最初に自己紹介していなかったこともあり、大変に面倒なやつと思われても仕方ないとも思います。

    ただ、あなた(nk9kさん)に、
    「今すぐパソコンを窓から投げ捨てて
    開発の会社に在籍しているなら辞表を書いて提出することを願っています。」
    と言われる筋合いはございません。

    ちなみに、あなたは、そういうことを誰でも平気で言われるのでしょうか?言われる方の立場にたったことありますか?
    正直、もし今の会社を私がやめて、次の職が開発者でなくても、あたながいるところには誰も行きたくないですね。

    こんなこと、ここで書くことではないですし、私もやになってきますので、
    この返信で最後にします。

    皆様、色々とご協力いただきまして、ありがとうございました。

    2009年11月26日 3:06
  • > はい。その通りです。
    > わからないことをわかる方に逐一聞いて何が悪いのでしょうか?
    聞いて悪いとは言ったつもりはないです。
    そう感じたのでしたら申し訳ありません。ただ、効率は悪いと思います。
    Googleで、質問文に出てる単語で検索かければ答えが出てくるものが多いと思うので
    質問前に検索して自分で調べてみる癖をつけると、今後の実力アップにつながって
    良いと思います。

    ちなみに、この質問なんですが、一応ItemsSourceプロパティにビギナーズラックさんが
    データをセットしたときに使っている型にCTypeでキャストしてやれば大丈夫だと思うと
    いうような返事をしたつもりなんですが、うまくいきましたでしょうか?
    中途半端なまま、投げ出しだと気持ち悪いので、ここだけでもきちんと、しめませんか?

    # 言われる側の立場にたつというのは難しいものですね。
    # Googleで検索すれば、すぐ出てくる内容のことを聞いてくる&全然解決に至ってないのは
    # 対応する側としては凄く疑問だったりします。

    かずき Blog:http://blogs.wankuma.com/kazuki/
    2009年11月26日 10:59
  • かずきさんフォローすみません。
    ありがとうございます。

    #まず調べてって言うと彼らは皆怒りだすのはなぜなのでしょうね。

    2009年12月1日 14:08