none
ユーザーコントロールでGridViewのColumnsと同じパブリック プロパティを追加する方法を知りたい RRS feed

  • 質問

  • お世話になります。ぜんぜんコードの書き方がわからず困っております。

    ご協力をお願い致します。

    環境 .NET Framework 4.7.2

    やりたい事

     ユーザーコントロールにオリジナルのページャーとGridView、1ページの表示件数指定の項目を持つ物を準備しました。

     プロパティやイベントの基本的な設定はできています。しかし、ユーザーコントール内のGridViewの項目をユーザー

     コントールを使用するページから引き渡す方法がわかりません。

     下記のような方法で渡せる事ができればベストなのですが、方法が一切わかりません。

        <uc1:GridControl runat="server" id="GridControl">
                  <Columns>
                    <asp:BoundField DataField="ItemNo" DataFormatString="{0:N0}" HeaderText="AreaNo" HtmlEncode="False" HtmlEncodeFormatString="False" >
                    <HeaderStyle HorizontalAlign="Center" />
                    <ItemStyle HorizontalAlign="Center" />
                    </asp:BoundField>
                </Columns>
        </uc1:GridControl>

    ユーザーコントロールではなく、カスタムコントロールで作るのが一般的ななのか不明で、

    カスタムコントールの場合、デザインとソースを別け、GridViewやDropDownListなど複数を1つのカスタムコントロール内にセットできるのか不明で、今回はユーザーコントロールで解決できないかチャレンジ中です。

    解決に向けてのご協力をお願い致します。

    <追加>

    試しに上記の書き方で埋め込んでみた結果、下記のようなエラーが発生しました。

    説明: この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソース ファイルに変更を加えてください。
    パーサー エラー メッセージ: 型 'ASP.usercontrol_gridcontrol_ascx' には 'Columns' というパブリック プロパティは含まれていません。

    public DataControlFieldCollection Columns;と言う指定を追加しても上記エラーが出ます。

    • 編集済み やきGO 2018年10月30日 9:32 試した事を追加
    2018年10月30日 9:28

回答

  •         [
            Bindable(true),
            DefaultValue(""),       DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
            PersistenceMode(PersistenceMode.InnerProperty),
            ]
            public virtual DataControlFieldCollection Columns
            {
                set
                {
                    foreach (BoundField column in value) {
                        GridView.Columns.Add(column);
                    }
                }
                get
                {
                    return GridView.Columns;
                }
            }
    

    上記のようなコードを書いた結果、

        <uc1:GridControl runat="server" id="GridControl">
                  <Columns>
                    <asp:BoundField DataField="ItemNo" DataFormatString="{0:N0}" HeaderText="AreaNo" HtmlEncode="False" HtmlEncodeFormatString="False" >
                    <HeaderStyle HorizontalAlign="Center" />
                    <ItemStyle HorizontalAlign="Center" />
                    </asp:BoundField>
                </Columns>
        </uc1:GridControl>

    の書き方でもエラーにならずにコンパイルでき、それとなく動きました。

    パブリックプロパティに対して [ 指定 ] で書く事が必要だったようです。

    本件、ご協力ありがとうございます。

    本件は上記内容で解決済みとさせて頂きます。

    • 回答としてマーク やきGO 2018年10月31日 2:14
    2018年10月31日 2:13

すべての返信

  • > 下記のような方法で渡せる事ができればベストなのですが、

    質問者さんにとっては「ベスト」ではないかもしれませんが、コードビハインド(.aspx.cs)に C# のコードで「下記」と同等の結果になるようにコーディングできると思いますが?

    それではダメで、デザイン画面で GridView 直に列の編集を行うときのような操作をして、.aspx ファイル側に「下記」のコードを自動生成させたいと言ってますか?
    2018年10月31日 0:58
  •         [
            Bindable(true),
            DefaultValue(""),       DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
            PersistenceMode(PersistenceMode.InnerProperty),
            ]
            public virtual DataControlFieldCollection Columns
            {
                set
                {
                    foreach (BoundField column in value) {
                        GridView.Columns.Add(column);
                    }
                }
                get
                {
                    return GridView.Columns;
                }
            }
    

    上記のようなコードを書いた結果、

        <uc1:GridControl runat="server" id="GridControl">
                  <Columns>
                    <asp:BoundField DataField="ItemNo" DataFormatString="{0:N0}" HeaderText="AreaNo" HtmlEncode="False" HtmlEncodeFormatString="False" >
                    <HeaderStyle HorizontalAlign="Center" />
                    <ItemStyle HorizontalAlign="Center" />
                    </asp:BoundField>
                </Columns>
        </uc1:GridControl>

    の書き方でもエラーにならずにコンパイルでき、それとなく動きました。

    パブリックプロパティに対して [ 指定 ] で書く事が必要だったようです。

    本件、ご協力ありがとうございます。

    本件は上記内容で解決済みとさせて頂きます。

    • 回答としてマーク やきGO 2018年10月31日 2:14
    2018年10月31日 2:13