- PR -

[ASP+VS2005(C#)] GridViewの行内にhidden項目を入れ込みたい

1
投稿者投稿内容
Kuai
会議室デビュー日: 2008/01/25
投稿数: 4
投稿日時: 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 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2008-02-01 11:20
引用:

Kuaiさんの書き込み (2008-02-01 11:06) より:
しかし、出来ればその値はGridViewには表示させたくないと考えています。
BoundFieldのVisible属性をTrueにすれば良いのではと考えたのですが、愚考でした。。
どなたか解決法をご教授頂けないでしょうか?


ん?逆じゃない?Falseじゃないの?
GridView自体はWeb知らないんでよくわかんないけど。
Kuai
会議室デビュー日: 2008/01/25
投稿数: 4
投稿日時: 2008-02-01 11:26
引用:

ん?逆じゃない?Falseじゃないの?



失礼しました。。
書き込み時に間違って書いてしまいました。
VisibleをFalseにした結果、画面上から存在自体がなくなってしまい、
値を取得することが出来なくなりました。
ご指摘ありがとうございました。
pitfall
会議室デビュー日: 2007/12/05
投稿数: 14
お住まい・勤務地: 東京都
投稿日時: 2008-02-01 12:27
コード:
	protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
	{
		if (e.Row.RowType == DataControlRowType.DataRow)
			e.Row.Cells[1].Attributes.Add("style", "visibility:hidden");
	}


GridViewのRowDataBoundイベントハンドラに上記コードを入れると
一応ブラウザ上ではテキストは見えません。

が、style属性で見えなくしているだけなので、HTMLソースを開かれ
ると内容が確認できてしまいますが…。参考までに。
RapidExpress
常連さん
会議室デビュー日: 2007/11/11
投稿数: 42
お住まい・勤務地: おおさか
投稿日時: 2008-02-01 12:35
引用:

BoundFieldのVisible属性をfalseにすれば良いのではと考えたのですが、愚考でした。。


このVisibleをfalseにしたBoundFieldをTemplateFieldに変換してみましょう。
そうすると、ItemTemplateにラベルが一つあるはずですので、
その名前でSelectedRowからFindControlすればいけると思います。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2008-02-01 14:55
引用:

しかし、出来ればその値はGridViewには表示させたくないと考えています。
BoundFieldのVisible属性をfalseにすれば良いのではと考えたのですが、愚考でした。。



表示を消すタイミングの問題でしょう。
PageがViewStateに保存するより後、Renderよりの前に消せばいいと思う。

コード:
protected override void Render(HtmlTextWriter writer)
{
	//ここで消す

	base.Render(writer);
}



ASP.NET ページのライフ サイクル
http://msdn2.microsoft.com/ja-jp/library/ms178472(VS.80).aspx
Kuai
会議室デビュー日: 2008/01/25
投稿数: 4
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)