- - PR -
[ASP+VS2005(C#)] GridViewの行内にhidden項目を入れ込みたい
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-01 11:06
お世話になります。
VS2005(C#)において、SqlDataSourceと連結したGridViewを利用しています。 (Toolからの貼り付けで出来上がる単純なものです) 任意の行の選択時に、その行の値を取得して別のTextBoxに表示させたいと考えています。 その値をGridViewに表示させた場合、下記のコードで値を取得反映出来ました。 protected void GridView1_OnSelectedIndexChanged(object sender, EventArgs e) { GridViewRow row = GridView1.SelectedRow; TextBox1.Text = row.Cells[1].Text; } しかし、出来ればその値はGridViewには表示させたくないと考えています。 BoundFieldのVisible属性をfalseにすれば良いのではと考えたのですが、愚考でした。。 (↑この行、ぶさいくろうさんからの指摘を受け修正致しました) どなたか解決法をご教授頂けないでしょうか? 宜しくお願い致します。 [ メッセージ編集済み 編集者: Kuai 編集日時 2008-02-01 11:28 ] | ||||||||
|
投稿日時: 2008-02-01 11:20
ん?逆じゃない?Falseじゃないの? GridView自体はWeb知らないんでよくわかんないけど。 | ||||||||
|
投稿日時: 2008-02-01 11:26
失礼しました。。 書き込み時に間違って書いてしまいました。 VisibleをFalseにした結果、画面上から存在自体がなくなってしまい、 値を取得することが出来なくなりました。 ご指摘ありがとうございました。 | ||||||||
|
投稿日時: 2008-02-01 12:27
GridViewのRowDataBoundイベントハンドラに上記コードを入れると 一応ブラウザ上ではテキストは見えません。 が、style属性で見えなくしているだけなので、HTMLソースを開かれ ると内容が確認できてしまいますが…。参考までに。 | ||||||||
|
投稿日時: 2008-02-01 12:35
このVisibleをfalseにしたBoundFieldをTemplateFieldに変換してみましょう。 そうすると、ItemTemplateにラベルが一つあるはずですので、 その名前でSelectedRowからFindControlすればいけると思います。 | ||||||||
|
投稿日時: 2008-02-01 14:55
表示を消すタイミングの問題でしょう。 PageがViewStateに保存するより後、Renderよりの前に消せばいいと思う。
ASP.NET ページのライフ サイクル http://msdn2.microsoft.com/ja-jp/library/ms178472(VS.80).aspx | ||||||||
|
投稿日時: 2008-02-01 18:42
RapidExpressさんの方法を試したところ、無事解決出来ました。
アドバイス下さった皆様、本当にありがとうございました。 <asp:TemplateField Visible="False"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("Label1") %>' /> </ItemTemplate> </asp:TemplateField> protected void GridView1_OnSelectedIndexChanged(object sender, EventArgs e) { GridViewRow row = GridView1.SelectedRow; TextBox.Text = Convert.ToString(((Label)row.FindControl("Label1")).Text); } |
1