質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

9621閲覧

GridView非表示BoundFieldへのBindと取得方法

doremifa

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2016/11/25 07:07

編集2016/11/25 07:28

###前提・実現したいこと
GridViewの更新用のキー(D)をみせたくないため
非表示のBoundFieldに設定しておきたいが
通常ではBindされていないようで取得しても空文字となっている

[実現したい操作]
1.page_loadでbind
2.ボタンB押下で編集モードへ移行
3.Aの値を編集
4.ボタンC押下でDをキーにテーブル更新

###aspx

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"> <Columns> <asp:BoundField DataField="A" HeaderText="A"></asp:BoundField> <asp:ButtonField Text="ボタン" CommandName="B"></asp:ButtonField> <asp:ButtonField Text="ボタン" CommandName="C"></asp:ButtonField> <asp:BoundField DataField="D" HeaderText="D" visible=false></asp:BoundField> </Columns> </asp:GridView>

###page_load

page_load

1//sqlcmd : sqlcommand コネクションおよびコマンドテキスト入力済み 2DataSet datas = new DataSet(); 3 using (SqlDataAdapter adapt = new SqlDataAdapter()) 4 { 5 adapt.SelectCommand = sqlcmd; 6 adapt.Fill(datas); 7 } 8 9 GridView1.DataSource = datas; 10 GridView1.DataBind(); 11

###試したこと
ブラウジングしたところ最初は表示しておき、OnRowCreatedで非表示にするような情報もありましたがすでにBoundFieldにvisible=falseが設定されており変更できないため(aspxを編集できない制約)適用できませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
ドットネットフレームワーク4.5.2
C#
Webform

aspxファイルを修正できない
sqldatasource等はaspxファイルに設置していない

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GridViewの更新用のキー(D)をみせたくないため

それは主キーですか? 主キーであれば、主キー情報がないと UPDATE や DELETE はできないので、GridView の DataKeyNames プロパティに指定するのが普通ですが。

.aspx ファイルの GridView のコードに DataKeyNames="D" というのが含まれていませんか? それがあれば GirdView に D を表示する / しないに関係なく(当該 BoundField の Visible が true / false に関係なく)D の値を取得できます。もし、.aspx ファイルに DataKeyNames の設定がなければ .aspx.cs ファイルでも設定できますので C# のコードで設定してください。

GridView などのデータバウンドコントロールは、DataKeyNames プロパティ、子コントロール、ビューステートなどからパラメータ名と値を取得し、Keys, Values, OldValues, NewValues という IDictionary コレクションを作成します。詳しくは以下の記事を見てください。

SqlDataSource などのパラメータ
http://surferonwww.info/BlogEngine/post/2010/09/26/How-a-data-bound-control-passes-parameters-to-data-source-control.aspx

DataKeyNames プロパティに D が設定してあれば D の値は Keys に含まれます。

Keys, Values, OldValues, NewValues には、データバウンドコントロールの Deleting, Deleted, Inserting, Inserted, Updating, Updated イベントのハンドラの引数を通じてアクセスできます。

今回の場合、GridView.RowUpdating イベントのハンドラの引数 GridViewUpdateEventArgs オブジェクトから Keys プロパティを使って DataKeyNames に設定した主キーにアクセスできます。

GridViewUpdateEventArgs.Keys プロパティ
https://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridviewupdateeventargs.keys.aspx

投稿2016/11/25 08:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doremifa

2016/11/27 23:56

大変勉強になりました。 ありがとうございました。 (コメントが反映されてませんでした)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問