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

質問
-
お世話になります。ぜんぜんコードの書き方がわからず困っております。
ご協力をお願い致します。
環境 .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 試した事を追加
回答
-
[ 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
すべての返信
-
[ 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