- PR -

動的DataGridの作成

1
投稿者投稿内容
やまぐち03
会議室デビュー日: 2004/04/13
投稿数: 12
投稿日時: 2004-04-13 01:06
こんにちは。初めまして。初心者で申し訳ありませんがよろしくお願いします。

DataGridは, 例えば
 <asp:DataGrid>
  <Columns>
   <asp:BoundColumn DataField="WARR_ID" HeaderText="Warranty Code">
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
    <ItemStyle CssClass="lblAll"></ItemStyle>
   </asp:BoundColumn>
   <asp:TemplateColumn HeaderText="Visible">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemTemplate>
<asp:checkbox id=cbVisible Runat="server" checked='<%# DataBinder.Eval(Container, "DataItem(1)") %>' OnCheckedChanged='<% #DataBinder.Eval(Container, "DataItem(2)") %>'>
</asp:checkbox>
</ItemTemplate>
</asp:TemplateColumn>
  </Columns>
 </asp:DataGrid>

という風に、タグで作成するものだと思います。
その中でTemplateColumnなども使用したりしますが、
これを全てVBコード内で行いたいです。

しかし、どうしてもTemplateColumnの部分だけうまくいきません。

'テンプレートカラム
Dim colTemp As New TemplateColumn
Dim cb As New CheckBox
colTemp.HeaderText = "HEADER"
colTemp.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
'この辺からどうしてもおかしくなってしまいます。
cb.Checked = DataBinder.Eval(dg.DataSource, "VISIBLE")
cb.Attributes.Add("onclick", "javascript:CbClick('" & DataBinder.Eval(dg.DataSource, "SUB_ID")" & "');")
colTemp.ItemTemplate = cbV

@データがうまくバインドできない。
Aテンプレートカラムにコントロールを追加できない

どうかよろしくお願いいたします。
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2004-04-14 15:16
こんにちは。
私のプロジェクトでも同じようなことをやりました。
こちらでも、「なるべく全部サーバサイドのコーディングで済ます」
というコンセプトで開発しています。

詳しくはまた書き込みしますが、ASPXのソースをいじらずに
サーバ側だけでやる方法のひとつには、データをバインドした後で
 Datagrid1.Items(i).Cells(j).Controls.Add(...)
のような形でコントロールを追加するとかありますが、これってどうでしょうか?


>@データがうまくバインドできない。
>Aテンプレートカラムにコントロールを追加できない
 
DataGridにデータをバインドする前はまだコントロールの実体が
出来ていないので、チェックボックスの操作や属性の設定などは出来ないと思います。
列のコントロールへのアクセスは、バインドした後にもう一周ループを回す必要が
ある、のでしょうか。うちはそうしました…


もう少し調べてもっとスマートなやり方があったらまた書き込みします。
とりあえず、何かの参考になるといいのですが。自信なさげでスミマセン
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2004-04-26 10:47
もう解決しているかもしれませんが・・・。
こんなのが参考になるかも知れません。
http://support.microsoft.com/default.aspx?scid=kb;ja;306227

このHOWTOだと TemplateColumn の作成を Page_Load イベントで行うとなっていますが、私的には Page_Init で行うべきだと思います。また、実際そうしています。
なぜなら、ポストバックしてきた時のビューステート反映前に TemplateColumn は既に作成されているべきだからです。

間違っていたらごめんなさい。
やまぐち03
会議室デビュー日: 2004/04/13
投稿数: 12
投稿日時: 2004-04-26 11:04
今回はかめたろさんに教えて頂いたやりかたで何とかできました。
Coolieさんのやりかたも、すごく参考になりました。
御返答どうもありがとうございました。

データグリッドはあんまり複雑な事できなそうでいろいろ出来るものですよね。
奥が深いです!!!!

1

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