none
GridviewにCheckBoxField(checkboxではない)を追加できない。 RRS feed

  • 質問

  • GridviewにCheckBoxFieldが追加できません?

    下記手順でGridviewにCheckBoxFieldを追加しようとしています:

    1、WebフォームにデザインモードでGridviewを追加します。

    2、Webフォームに追加されたGridviewの右上の矢印をクリックし、”Gridview タスク”を表示させ、”列の編集”を選択します。

    3、フィールド ダイアログが開かれます。

    4、”使用できるフィールド(A):” の項目の中から、”CheckBoxField”を選択します。

    5、このタイミングで”追加(D)”ボタンを押したいのですが、ボタンが選択できない状態になりボタンの色が薄くなります。

    GridviewにCheckBoxFieldを追加する方法わかりましたら教えてください。

    以上、よろしくお願いします。

    開発環境:

    Microsoft Visual Studio Express 2012 for Web
    Version 11.0.50727.1 RTMREL
    Microsoft .NET Framework
    Version 4.5.50709

    2013年1月24日 7:37

回答

  • 了解しました。それであれば正しい動作だと思います。CheckBoxFieldは基本的にデータソースの列にバインドして使用するからです。
    今回の場合でCheckBoxを追加するには、CheckBoxFieldではなくTemplateFieldを追加し、GridViewのスマートタグでテンプレートの編集をクリックし、表示されたスマートタグパネルにおけるItemTemplateに、ツールボックスからCheckBoxをドラッグして配置すれば良いと思います。


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

    2013年1月25日 2:37
    モデレータ

すべての返信

  • > 5、このタイミングで”追加(D)”ボタンを押したいのですが、ボタンが選択
    > できない状態になりボタンの色が薄くなります。

    環境が違いますが(自分は VS2010 Pro., ASP.NET 4)、「ボタンが選択できない」ということはなく、ボタンクリックで以下のように CheckBoxField が追加されますが?

    <asp:GridView ID="GridView1" runat="server">
        <Columns>
            <asp:CheckBoxField />
        </Columns>
    </asp:GridView>

    どこかファイルが壊れているのかもしれませんね。デザイン画面でだめならソース画面で作業したらどうなるでしょうか? 単なるデザイナの問題ならそれで問題は回避できると思います。

    2013年1月24日 14:35
  • 私の以下の環境で試してみましたが、予想通り再現しませんでした。

    Windows 7 64bit
    Microsoft Visual Studio Ultimate 2012
    Version 11.0.51106.01 Update 1
    Microsoft .NET Framework
    Version 4.5.50709

    通常はそのようなことにはなりませんから、どこかしら環境がおかしくなっているのかもしれません。問題を絞り込むために、いくつか試してみることはあると思います。

    1.新しくWebフォームを追加した直後に同じ作業を行っても同様なのか?

    2.SurferOnWwwさんが書かれているように、ソースに直接記述した場合はどうなるのか?

    3.追加ボタンはフィールドダイアログを開いた時点で既にグレーアウトしているのか? もし、そうでないのであれば、CheckBoxField以外を選択した場合もグレーアウトするのか?

    4.新しくプロジェクトを作成した場合も同様なのか?

    最後の4.でもダメな場合は、Visual Studioの再インストールを試した方が良いかもしれませんね。


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

    2013年1月25日 1:03
    モデレータ
  • SurferOnWwwさん、ご教授ありがとうございます。

    >デザイン画面でだめならソース画面で作業したらどうなるでしょうか? 

    SurferOnWwwさんが載せてくれたCheckBoxField追加時に書き出されるソースコードをアレンジして自分のGridviewのソースに書き込んでみました。※BOLD文字が追加したコードです。

    *****************************自分のソースコード START

           <asp:GridView ID="GVReqHReqDsp" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False">
                <Columns>
                     <asp:BoundField DataField="cnl_sw" HeaderText="取消" SortExpression="cnl_sw" />
                    <asp:CheckBoxField DataField="cnl_sw" HeaderText="取消2" SortExpression="取消2" />
                </Columns>
            </asp:GridView>

    *****************************自分のソースコード END

    すると、下記のエラーがデザイン画面で表示されました。

    *****************************エラー START

    GridView GVReqHReqDsp
    コントロールを描画中にエラーが発生しました。
    CheckBoxField 'cnl_sw'にあるデータをブール値として渡すことができませんでした。BoundFieldを使用してください。

    *****************************エラー END

    このエラーメッセージの意味は、データソースをバインドしたGridViewではCheckBoxFieldが使用できないという事ですかね? ちなみにPostgresqlデータベースで作成したテーブルのBool型のcnl_swフィールドです。

    ※※※※※

    最初の質問に載せた手順にステップが一つ抜けていました、申し訳ございません。 ※BOLD文字が追加したステップです。

    *****************************正しい手順 START

    下記手順でGridviewにCheckBoxFieldを追加しようとしています:

    1、WebフォームにデザインモードでGridviewを追加します。

    1-2(追記)、Webフォームに追加されたGridviewの右上の矢印をクリックし、”Gridview タスク”を表示させ、”データソースの選択:”から既存のデータソースを選択します。

    2、Webフォームに追加されたGridviewの右上の矢印をクリックし、”Gridview タスク”を表示させ、”列の編集”を選択します。

    3、フィールド ダイアログが開かれます。

    4、”使用できるフィールド(A):” の項目の中から、”CheckBoxField”を選択します。

    5、このタイミングで”追加(D)”ボタンを押したいのですが、ボタンが選択できない状態になりボタンの色が薄くなります。

    *****************************正しい手順 START

    2013年1月25日 1:42
  • 了解しました。それであれば正しい動作だと思います。CheckBoxFieldは基本的にデータソースの列にバインドして使用するからです。
    今回の場合でCheckBoxを追加するには、CheckBoxFieldではなくTemplateFieldを追加し、GridViewのスマートタグでテンプレートの編集をクリックし、表示されたスマートタグパネルにおけるItemTemplateに、ツールボックスからCheckBoxをドラッグして配置すれば良いと思います。


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

    2013年1月25日 2:37
    モデレータ
  • 問題は解決してないと理解していますが、それなら回答済みチェックマークは入れないほうがいいと思います。読む人が少なくなってしまい、回答が得にくくなりますので。

    > このエラーメッセージの意味は、データソースをバインドしたGridViewで
    > はCheckBoxFieldが使用できないという事ですかね?

    そうではなくて、SqlDataSource からデータを渡すことができないと言うことです。アップされたコードを見る限り、SqlDataSource には接続文字列もSELECT クエリも設定されてないようですが、それではデータは取得できないと思いますが。

    その前に、Postgresql データベースと .NET 用のプロバイダの設定はきちんとできているのでしょうか? SqlDataSource とプロバイダの相性は問題ないのでしょうか?

    > *******************正しい手順 START
    >
    > 下記手順でGridviewにCheckBoxFieldを追加しようとしています:
    >
    > 1、WebフォームにデザインモードでGridviewを追加します。

    それはまっさらな(まだコントロール等何も配置してない)フォームですか?

    それにツールボックスから GridView のみをドラッグ&ドロップして、その操作をしてもダメなのでしょうか? そうだとすると、やはりどこか VWD のファイルが壊れているのかもしれません。

    2013年1月25日 13:05
  • SurferOnWwwさん、返信ありがとうございます。

    >問題は解決してないと理解していますが、それなら回答済みチェックマークは入れないほうがいいと思います。読む人が少なくなってしまい、回答が得にくくなりますので。

    ご親切なアドバイス本当にありがとうございます。大変勉強になります。

    >アップされたコードを見る限り、SqlDataSource には接続文字列もSELECT クエリも設定されてないようですが、それではデータは取得できないと思いますが。

    アップしたコードにデータソースの部分を含めるのを忘れていました。誤解させてしまいすみません。

    trapemiyaさんの回答の解決策で無事、Gridviewにチェックボックスを追加することが出来ました。本当にありがとうございました。これからもよろしくお願いいたします。

    2013年1月30日 5:33
  • trapemiyaさん、返信ありがとうございます。

    trapemiyaさんの回答の解決策で無事、Gridviewにチェックボックスを追加することが出来ました。

    下記が太文字が生成されたソースです。

    本当にありがとうございました。 

    これからもよろしくお願いします。

    *****************************自分のソースコード  START

            <asp:GridView ID="Gridview1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" style="margin-right: 0px">
                <Columns>

                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("cnl_sw") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>

                </Columns>
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT staff_id, fscl_yr, req_no,cnl_swFROM table1 WHERE (staff_id = ?) ORDER BY req_no DESC">
                <SelectParameters>
                    <asp:ControlParameter ControlID="txtReqHDStaffId_hidden" DbType="AnsiString" Name="?" PropertyName="Text" />
                </SelectParameters>
            </asp:SqlDataSource>

    *****************************自分のソースコード  End

    2013年1月30日 5:52
  • 一番最初の質問の問題(下記)は解決したのでしょうか? スレッドタイトルにあるように、このスレッドで一番の問題はこれですよね?

    > 5、このタイミングで”追加(D)”ボタンを押したいのですが、
    > ボタンが選択できない状態になりボタンの色が薄くなります。


    また、回避策としての下記も解せないのですが、CheckBoxField でダメだったのは間違いないでしょうか。

    > trapemiyaさんの回答の解決策で無事、Gridviewにチェックボック
    > スを追加することが出来ました。

    CheckBoxField の中身は CheckBox です。なので、

    <asp:TemplateField>
      <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("cnl_sw") %>' />
      </ItemTemplate>
    </asp:TemplateField>

    のように Template を使うのと、以下のように

    <asp:CheckBoxField DataField="cnl_sw" />

    CheckBoxField を使うのとでは同じ結果になるはずですが?

    そもそも、最初に SqlDataSource をきちんと設定した後、デザイン画面で GridView の DataSourceID を SqlDataSource の ID に設定すれば、それだけですべてのコードが自動生成されるはずです(最初の質問にあったような操作は不要のはずです)。

    • 編集済み SurferOnWww 2013年1月30日 13:04 誤記訂正
    2013年1月30日 12:32