- - PR -
DataBind後のGridViewのプロパティ編集ができない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-03-12 00:49
ASP.NET + AJAX で開発しております。
GRIDVIEWのDATABIND (GRID表示はできている)後の GRIDVIEW プロパティの調整ができなくて困っております。 具体的にはPAGELOAD イベントで、DATABINDを行い、 PRERENDARイベントか、ROWCREATEDイベントで、GRIDVIEWの プロパティを操作しようと考えております。 すべて、サーバースクリプトで行い、ウィザード等は使用 しません。 VB側の大体のソースですが、 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim taAdapter_new As ストアドTableAdapter = _ New ストアドTableAdapter Dim dtTable As DataTable = Nothing Dim dtTB2_new As ストアドDataTable = New ストアドDataTable dtTB2_new _ = taAdapter_new.GetData(11).Copy() INFORMATION_FIRST.Text = Year(dtTB2_new.Rows(0).Item(1)).ToString + "/" + _ Month(dtTB2_new.Rows(0).Item(1)).ToString + "/" + _ Day(dtTB2_new.Rows(0).Item(1)).ToString + _ ": " + dtTB2_new.Rows(0).Item(2).ToString '履歴表示 Dim strAllInfo As String = "" Dim intInfoCount As Integer = 0 Dim dt As New DataTable dt.Columns.Add(New DataColumn()) For intInfoCount = 1 To dtTB2_new.Count - 1 strAllInfo = Year(dtTB2_new.Rows(intInfoCount).Item(1)).ToString + "/" + _ Month(dtTB2_new.Rows(intInfoCount).Item(1)).ToString + "/" + _ Day(dtTB2_new.Rows(intInfoCount).Item(1)).ToString + _ ": " + dtTB2_new.Rows(intInfoCount).Item(2).ToString ListBox1.Items.Add(New ListItem(strAllInfo, intInfoCount)) Dim row1 As GridViewRow = New GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal) Dim cell1 As TableCell = New TableCell() cell1.ColumnSpan = 1 cell1.RowSpan = 1 cell1.Text = strAllInfo 'row1.Cells.Add(cell1) row1.Controls.Add(cell1) dt.Rows.Add(row1.Cells.Item(0).Text) 'このような形でGridViewに直接追加したかったが、うまくいかないので、 ' DataBINDに切り替えた。 'GridView1.Controls(0).Controls.AddAt(GridView1.Rows.Count + 1, row1) 'ここまでがうまくいかない Next 'INFORMATION_ALL = dtTB2.Rows(0).Item(1).ToString GridView1.DataSource = dt GridView1.DataBind() 'BINDしたデータテーブルの内容はGRIDVIEWに表示される。 ’うまくいかない GridView1.EnableViewState = False ’うまくいかない GridView1.CssClass = "LoginBorder" ’うまくいかない GridView1.CaptionAlign = TableCaptionAlign.Left End Sub Protected Sub GridView1_PreRendar(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.PreRender ’うまくいかない GridView1.EnableViewState = False ’うまくいかない GridView1.CssClass = "LoginBorder" ’うまくいかない GridView1.CaptionAlign = TableCaptionAlign.Left End Sub 残念ながら GridView1_PreRendar イベントでGridViewのプロパティーをいじっても、まったく無視されます。 となると、GRIDVIEWの描画自体が、PreRENDAR後に行われているという事 なのでしょうか………。 どなたか、ご存知でしたら、ご教授願いたいのですが。。。 よろしくお願いいたします。 | ||||
|
投稿日時: 2009-03-12 22:28
投稿文を読んでいる人が困るのは、どうなるのか想像もできない投稿です。
「うまくいかない」とは書いてあるのですが、どのような状態を「うまくいかない」と表現されているのでしょう? たとえば、GridView1 の CssClass を設定されていますが、クライアントに出力される GridView (確か、table 要素だったと思います)に、class 属性が追加されていないということでしょうか? | ||||
|
投稿日時: 2009-03-13 01:14
>Jitta様
わかりにくくて申し訳ありません。 クライアントに出力される、GridViewにclass属性が追加されないのです。 また、他のGridViewに対するプロパティの操作も、DataBind後だと、 効かないようです。 DataBindを使わない、GridViewの描画、データ操作をしたほうがよろしいのかも しれません。 PreRendarイベント時に、データバインドのデータ等がバインドされると いうのを前に見た事があるのですが、PreRendarComplete タイミングで、 GridViewのスタイルを変化させようとしても、できなかったので、 原因を知りたかったのです。 むしろ、DataBindを使った場合で、GridViewのスタイルをサーバースクリプト で実現させられる場合のソースを見てみたい、という気持ちもあります。 ちょっと、まだ、GridViewについて、分からない事が多く、経験不足で 申し訳ありません。 参照URLとして、自分が他サイトで、たてたGridViewのヘッダースレッド があるのですが、 http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/edb4cb97-9b30-4f74-8144-6ae640ba7128/ 何らかのヒントを自分なりに探して、試してはいるのですが…。 EnableViewState = false updateパネルなども、アップデート状態は 場合に応じてという形にしております。 それで、GridViewデータの更新等は問題なくできております。 http://social.msdn.microsoft.com/forums/ja-JP/vsgeneralja/thread/fd058882-c73b-4910-9244-ad0c5486ade8/#page:2 こちらも参照しました。 [ メッセージ編集済み 編集者: ニセイタ 編集日時 2009-03-13 01:24 ] [ メッセージ編集済み 編集者: ニセイタ 編集日時 2009-03-13 01:27 ] | ||||
|
投稿日時: 2009-03-13 06:12
以下のサイトが参考になるかと・・・
http://msdn.microsoft.com/ja-jp/library/ms178472(VS.80).aspx http://msdn.microsoft.com/en-us/library/ms178472.aspx#databindingevents http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/ADF/graphics/page_lifecycle.png _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2009-03-13 07:39
では、DataBind メソッドの前に書くと、期待どおりになるのでしょうか?
最初に書かれている内容では、DataBind とプロパティ設定の順番が問題だと理解されますが、本当にそうなのでしょうか?そうであるなら、順番をかえておけばいいと思うのですが、そうされていないのは、何故でしょう? | ||||
|
投稿日時: 2009-03-14 03:47
>Access様
ありがとうございます。 大変参考になります。 http://msdn.microsoft.com/en-us/library/ms178472.aspx#databindingevents PreRender Each data bound control whose DataSourceID property is set calls its DataBind method. For more information, see Data Binding Events for Data-Bound Controls later in this topic. ここに、バインドコントロールのデータソースIDプロパティがそのデータバインドメソッドでセットされると書いてありますね。 DataBinding のイベント説明で This event is raised by data-bound controls before the PreRender event of the containing control (or of the Page object) and marks the beginning of binding the control to the data. PreRenderイベントの前にデータバインディングが行われているという事ですかね。 RowCreated (GridView only) or ItemCreated のイベント説明で Use this event to manipulate content that is not dependent on data binding. For example, at run time, you might programmatically add formatting to a header or footer row in a GridView control. データバインドによらない場合は、このイベントで、ヘッダーや、フッターに対する 操作を加えようと書いてありますかね。 RowDataBound (GridView only) or ItemDataBound のイベント説明で、 直接データを見たり、変更ができると書いてあります。 DataBound This event marks the end of data-binding operations in a data-bound control. In a GridView control, data binding is complete for all rows and any child controls. ここでは、データバインディングが終了すると書いてありますかね SaveStateComplete PreRenderイベントの後にSaveStateComplete があり、VIewStateが保存される。 と書いてありますね。これは、ViewStateの保存がTrueになっている時に 発生という認識でいいのですかね。 ちょっと、GridViewのスタイルをどこで設定するかという記述は分かりません でしたが、コントロールが、作成されるのが、Rendarイベントだとすると、 そのタイミングは、Rendarイベントの前である必要があるという事になります よね。 自分の認識で間違っていないでしょうか。 貴重な情報ありがとうございました。 | ||||
|
投稿日時: 2009-03-14 03:58
>Jitta様
ご返信ありがとうございます。
期待通りには、なっておりません。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.aspx ここをチェックしてみると、ちょっと、自分の命令文が間違っていたのかもしれない という気もしてきました。 RowStyle 等のスタイルの設定を、プログラム上で変更してみて、再度挑戦して みようかと思っております。 以前ヘッダーを2行にする操作を、データバインドを行う前に、作成した事 があるのですが、データバインドをヘッダー2行にしたGridViewに対して 行っても、データバインド後は、自分の作成した、ヘッダー2行は無視されて、 1行のヘッダーと、データ部という構成になりましたので、順番が 重要なのかと考えておりましたが、スタイルの設定を、まず、確認してから、 再度、順番については考えて見ます。 ご指導ありがとうございます。 | ||||
|
投稿日時: 2009-03-15 07:30
以下のスレッドを読んでみてください。
ページライフサイクルがよく分かります。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=36752&forum=7&start=0 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 |