C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: VB.NET 画面表示しているコントロールが更新されません


(過去ログ 75 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■43770 / inTopicNo.1)  VB.NET 画面表示しているコントロールが更新されません
  
□投稿者/ おじゃ (1回)-(2009/11/18(Wed) 14:00:52)

分類:[.NET 全般] 

以下、サンプルの Hoge の値が画面に表示されません。
どなたかご存知の方がいらっしゃいましたらご教授下さい。

以下のサンプルの説明です。

・初回アクセス時にLabel1に Firstという値を入れます。
 ⇒初回時はFirstがラベルに表示される。

・セッション変数に格納したL1に、Hogeという値を入れる。
 ⇒Timer処理では、ラベルの値が変わりません。

Partial Public Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Not IsPostBack Then
'初回アクセス時のみ実行

Label1.Text = "first"
Session("Label1") = Label1

Timer1.Interval = 1000
Timer1.Enabled = True

End If

End Sub

Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick

Timer1.Enabled = False

Dim L1 = Session("Label1")
L1.Text = "hoge"

UpdatePanel1.Update()

Timer1.Enabled = True

End Sub

End Class


★ちなみに、以下の対応をするとHogeに代わります。

・ L1.Text = "hoge" の所を、 Label1.Text = "hoge" にする。
・If Not IsPostBack Thenの所をなくす。

 Session変数で保持しているコントロールと画面表示のコントロールは別物のようです。
 何か同期とらせる事はできないでしょうか?


★実際の処理で、何がしたいか説明します。

・初回表示時に画面に表示しているコントロールを全て取得する。
 取得したコントロール名をSessionに入れる。
・次の処理では、DBよりデータを取得してラベルの値を変更する。
 (初回行った、画面表示取得関数は実行しない。)



引用返信 編集キー/
■43771 / inTopicNo.2)  Re[1]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ はつね (1113回)-(2009/11/18(Wed) 14:09:42)
はつね さんの Web サイト
No43770 (おじゃ さん) に返信
> 以下、サンプルの Hoge の値が画面に表示されません。

(1) WEBページ上にLabel1という名前でラベルコントロールを貼っておく
(2) Page_Loadで、Not IsPostBackのときに、Me.Label1.Textの値をSession("Label1")に設定しておく。
(3) AJAXつかってタイマーイベントをおこす(ここはいまもできている?)
(4) タイマーイベントの中で、Me.Label1.Text=CType(Session("Label1"),String)を実行する

引用返信 編集キー/
■43773 / inTopicNo.3)  Re[2]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ みきぬ (665回)-(2009/11/18(Wed) 14:31:43)
コントロールそのものを Session に持っておきたい、その理由はなんでしょ?
Label1.Text = "hoge" だと何かまずいことがあるのでしょうか?

コントロールの名称(Page.FindControl() メソッドに与えるパラメータ)を代わりに持って置いて、
それを使うという手は思いつかなくもないですが。
引用返信 編集キー/
■43774 / inTopicNo.4)  Re[3]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ おじゃ (2回)-(2009/11/18(Wed) 14:37:51)
No43773 (みきぬ さん) に返信
> コントロールそのものを Session に持っておきたい、その理由はなんでしょ?
> Label1.Text = "hoge" だと何かまずいことがあるのでしょうか?
>
> コントロールの名称(Page.FindControl() メソッドに与えるパラメータ)を代わりに持って置いて、
> それを使うという手は思いつかなくもないですが。

みきぬさん

 早々のご回答ありがとうございます。
 理由は、毎回画面に表示しているコントロールIDを取得する処理を無くし負荷を軽減させたい為です。
 (ちなみに画面は多数あります。)

 以下の処理を行いたいと思っています。

 ・画面を開くと画面に表示しているコントロールを全て取得する。
  取得したコントロール名をSessionに入れる。(初回時のみ)
 ・Timer処理では、コントロールIDをキーに、DBよりデータを取得する。
  (初回行った、画面表示取得関数は実行しない。)
 ・取得したデータをラベルにセットする。


引用返信 編集キー/
■43775 / inTopicNo.5)  Re[2]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ おじゃ (3回)-(2009/11/18(Wed) 14:39:43)
No43771 (はつね さん) に返信
> ■No43770 (おじゃ さん) に返信
>>以下、サンプルの Hoge の値が画面に表示されません。
>
> (1) WEBページ上にLabel1という名前でラベルコントロールを貼っておく
> (2) Page_Loadで、Not IsPostBackのときに、Me.Label1.Textの値をSession("Label1")に設定しておく。
> (3) AJAXつかってタイマーイベントをおこす(ここはいまもできている?)
> (4) タイマーイベントの中で、Me.Label1.Text=CType(Session("Label1"),String)を実行する

はつねさんもご回答ありがとうございます。

言葉が足りませんでした、すみませんでした。
(1)は行っております。
(4)のコントロールID(Label1)がプログラムで直接指定できない為、困っております。。。
引用返信 編集キー/
■43776 / inTopicNo.6)  Re[4]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ みきぬ (666回)-(2009/11/18(Wed) 15:10:55)
コントロールごとに、表示したい内容をDBで管理したいってことかしら?
このラベルは「氏名」、これは「住所」、これは「電話番号」といったように。
# で、データを変えればそれぞれ「Name」「Address」「TEL」に変えたりできる、と

…でもそれだと、Timer を使う理由が分からないんだよね。

もしかして、画面を初回表示するときにそうなっているのが本当は理想で、
それができないから仕方なく Timer と UpdatePanel を使って、時間経過でイベントを発生させて処理をしていたりする?
引用返信 編集キー/
■43777 / inTopicNo.7)  Re[3]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ はつね (1114回)-(2009/11/18(Wed) 15:17:48)
はつね さんの Web サイト
No43775 (おじゃ さん) に返信
> >>以下、サンプルの Hoge の値が画面に表示されません。
>>
>>(1) WEBページ上にLabel1という名前でラベルコントロールを貼っておく
>>(2) Page_Loadで、Not IsPostBackのときに、Me.Label1.Textの値をSession("Label1")に設定しておく。
>>(3) AJAXつかってタイマーイベントをおこす(ここはいまもできている?)
>>(4) タイマーイベントの中で、Me.Label1.Text=CType(Session("Label1"),String)を実行する
>
> はつねさんもご回答ありがとうございます。
>
> 言葉が足りませんでした、すみませんでした。
> (1)は行っております。
> (4)のコントロールID(Label1)がプログラムで直接指定できない為、困っております。。。

はってあるなら、(4)の記述で指定できるはずですけど。

引用返信 編集キー/
■43778 / inTopicNo.8)  Re[4]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ はつね (1115回)-(2009/11/18(Wed) 15:19:41)
はつね さんの Web サイト
No43774 (おじゃ さん) に返信
>  理由は、毎回画面に表示しているコントロールIDを取得する処理を無くし負荷を軽減させたい為です。

Sessionに置いた方が(メモリとかの)負荷が高いのでは?


>  以下の処理を行いたいと思っています。
>
>  ・画面を開くと画面に表示しているコントロールを全て取得する。

無駄な処理のような。


>   取得したコントロール名をSessionに入れる。(初回時のみ)

無駄な処理のような。


>  ・Timer処理では、コントロールIDをキーに、DBよりデータを取得する。

無駄な処理のような。


>  ・取得したデータをラベルにセットする。

各ページのラベル名を一致させておくだけでいいような。

引用返信 編集キー/
■43779 / inTopicNo.9)  Re[5]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ おじゃ (5回)-(2009/11/18(Wed) 15:23:41)
No43776 (みきぬ さん) に返信

みきぬさん、返信ありがとうございます。

> コントロールごとに、表示したい内容をDBで管理したいってことかしら?
> このラベルは「氏名」、これは「住所」、これは「電話番号」といったように。
> # で、データを変えればそれぞれ「Name」「Address」「TEL」に変えたりできる、と
 
⇒そうです! まさしくその通りです。

> …でもそれだと、Timer を使う理由が分からないんだよね。

⇒Timerは、最新のデータを表示したいからです。(リアルタイム処理)

 以下説明です。
 Name、Address、TELだとわかりづらいので、電力の例にします。
 
 機器名称  値       画面表示のコントロールID
=============================
 1の機器  XX ボルト   Label1
 2の機器  YY ボルト   Label2
  |
  |
 Nの機器  NN ボルト   LabelN
  
 このような機器が数百あり、テーブルに各データを持っています。
 テーブルのデータは最新の値が書き込まれ、画面には常に最新データを表示します。(リアルタイム)
 そのような画面を数十画面作ります。
 
 ですので、画面に張ったコントロールID(Label1、Label2、LabelN)を
 プログラムが自動取得して、データを取得するような仕組みにしたいと思っています。
 
 毎回、画面のコントロールIDを取得するのが嫌なのでご質問させていただきました。

引用返信 編集キー/
■43780 / inTopicNo.10)  Re[5]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ おじゃ (6回)-(2009/11/18(Wed) 15:43:01)
No43778 (はつね さん) に返信
> ■No43774 (おじゃ さん) に返信

はつねさん、ご回答ありがとうございます。

上記理由で、プログラム中に直にコントロールIDを書くのが出来なくなっております。
すみません、何かアドバイスがござましたらよろしくお願い致します。

※Timer処理は3秒に1回ぐらいを予定しています。
引用返信 編集キー/
■43800 / inTopicNo.11)  Re[6]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ みきぬ (667回)-(2009/11/19(Thu) 11:06:40)
No43779 (おじゃ さん) に返信

状況はたぶん理解したと思う。
で、そのやり方はいろいろと間違っているとも思うんだけど、自分にはうまく説明できないんで、
そこら辺は別の人に説明を期待しつつ、今のやり方をあまり変えない方向で提案してみる。

今の処理は、Label そのものをセッションに入れているけど、
かわりに Label.ID をセッションに入れればいいんじゃない?
そうすれば、コントロールは Page.FindControl(取り出したIDの文字列) で特定できるので、
それを Label にキャストして使えばよい。

あ、Webアプリで3秒に1回更新はやめたほうがいいよ。たとえ UpdatePanel を使っていたとしてもね。
引用返信 編集キー/
■43802 / inTopicNo.12)  Re[7]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ おじゃ (7回)-(2009/11/19(Thu) 11:35:11)
No43800 (みきぬ さん) に返信
> ■No43779 (おじゃ さん) に返信
>
みきぬさん

 返信ありがとうございました。
 アドバイスの方法で試してみたいと思います。

 途方にくれていた所です、とても助かります。

 結果は追って連絡いたします。

 以上、どうもありがとうございました。
引用返信 編集キー/
■43806 / inTopicNo.13)  Re[6]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ はつね (1116回)-(2009/11/19(Thu) 12:18:09)
はつね さんの Web サイト
No43779 (おじゃ さん) に返信
>  このような機器が数百あり、テーブルに各データを持っています。
>  テーブルのデータは最新の値が書き込まれ、画面には常に最新データを表示します。(リアルタイム)
>  そのような画面を数十画面作ります。
>  
>  ですので、画面に張ったコントロールID(Label1、Label2、LabelN)を

一覧表示するならGrid系のコントロール使うか、Repeaterコントロールあたり
使って自分でレンダリングした方がいいような。


「Page.FindControl(取り出したIDの文字列)」って「毎回画面に表示している
コントロールIDを取得する処理」ですし、どうしてもそういった処理は必要に
なりますから。
それこそ、ascx化するとか「無理」とかいって現状のアプローチを見直さない
と遅かれ早かれ行き詰ると思うんですけどねー。

引用返信 編集キー/
■43816 / inTopicNo.14)  Re[7]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ おじゃ (8回)-(2009/11/19(Thu) 15:39:28)
No43806 (はつね さん) に返信
> ■No43779 (おじゃ さん) に返信


 はつねさん

 ご返信ありがとうございます。
 色々とアドバイスいただき、感謝いたします。

 Repeaterコントロールですね。ちょっと調べてみます。

 本件完了いたしましたのでご報告いたします。

 どうもありがとうございました。
引用返信 編集キー/
■43818 / inTopicNo.15)  Re[7]: VB.NET 画面表示しているコントロールが更新されません
□投稿者/ おじゃ (9回)-(2009/11/19(Thu) 15:40:05)
No43800 (みきぬ さん) に返信
> ■No43779 (おじゃ さん) に返信
>

みきぬさん!

ありがとうございました。
教えて頂いたとおり、IDからコントロールを取得する関数を使用したら
処理がうまくいきましたぁぁ!!!!!!!!!!!!!!!!

見ず知らずの私にこれだけ丁寧に教えて頂き、本当に感謝いたします。

本当にありがとうございました!!!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -