- PR -

DataGridコントロールのカスタマイズに関しまして

1
投稿者投稿内容
たなすぺ
常連さん
会議室デビュー日: 2003/06/23
投稿数: 35
投稿日時: 2005-02-01 14:55
毎々大変お世話になっております。

現在、DataGridを元にしてカスタムコントロールを作成しています。

===================実現したいこと===================
・DataGridの先頭列に表示されるAタグ内に独自の属性を追加したい。

(イメージとしてはCalendarコントロールのDayRenderイベントと
  同様に1セル毎に処理を行ないたい。。。)

====================================================


方法としましてはDataGridの1セル描画時ごとのイベントを
検知し、そこで処理を行なえば良いのではないかと
考えています。

上記の実現方法に関しましてご教授頂けますよう
宜しくお願い致します。


SE卵
大ベテラン
会議室デビュー日: 2004/10/22
投稿数: 135
投稿日時: 2005-02-01 15:51
こんにちは。期待に添えていなかったらごめんなさい。

DataGridの1セル描画時のイベントはないと思います(たぶん)。
だけど一行描画時のイベントならあるんですけどそれを使って
やれなくはないのでは?

下記サンプルでは、DataGrid内の一行一行の削除ボタンにメッセ−ジボックスを
表示するスクリプトを追加しています。

コード:
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

    Dim lbtnButton As Button

    If ((e.Item.ItemType = ListItemType.EditItem) Or (e.Item.ItemType = ListItemType.AlternatingItem) Or (e.Item.ItemType = ListItemType.Item)) Then
        lbtnButton = CType(DataGrid1.Items(e.Item.ItemIndex).FindControl("削除ボタンのID"), Button)
        lbtnButton.Attributes("onclick") = "if (!confirm('本当に削除しますか?')){return false;} "
        End If

    End Sub




これを応用すればできるのでは?応用と言うまでもないですが、一行内にあるコントロール
を取得して属性なりなんなり追加すればよいのではないでしょうか。
たなすぺ
常連さん
会議室デビュー日: 2003/06/23
投稿数: 35
投稿日時: 2005-02-01 16:12
SE卵さん、早速のご返答ありがとうございます。

私の説明が不足していたため、補足させて頂きます。

☆☆☆☆☆☆☆☆☆☆☆コントロールの作成☆☆☆☆☆☆☆☆☆☆☆
[Designer("UIDataGridClass1Designer,WebControlTest")]
public class DataGridClass1: WebControl, INamingContainer
{
  protected override void CreateChildControls()
  {
   this.Controls.Add(_DataGridTest);
  }
}
     [System.Security.Permissions.PermissionSetSystem.
       Security.Permissions.SecurityAction.Demand, Name="FullTrust")]      protected override void RenderContents(HtmlTextWriter writer)
{
  writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "blue ");
  base.RenderContents(writer);

}
☆☆☆☆☆☆☆☆☆☆☆コントロールの作成☆☆☆☆☆☆☆☆☆☆☆

※RenderContentsメソッドをオーバーライドすると
 作成したカスタムDataGridのTableタグ内には指定の属性を出力できます。
 <Table style="Color:Blue";>

このようにカスタムコントロールを作成し、
Tableタグではなく、TDタグまたはTRタグに属性を出力したいと
考えています。

出力HTMLのイメージは下記の通りです。
=========================================
<Table style="Color:Blue";>
 <TR>
  <TD ZOKUSEI="1">1</TD>
  <TD ZOKUSEI="2">2</TD>
  <TD ZOKUSEI="3">3</TD>
 </TR>
 <TR>
  <TD ZOKUSEI="4">4</TD>
  <TD ZOKUSEI="5">5</TD>
  <TD ZOKUSEI="6">6</TD>
 </TR>
</Table>
=========================================

以上、大変お忙しい中申し訳ございませんが
ご教授の程、宜しくお願い致します。
たなすぺ
常連さん
会議室デビュー日: 2003/06/23
投稿数: 35
投稿日時: 2005-02-01 17:01
SE卵さん、お世話になっております。

題記の件、SE卵さんにご指導いただきました方法で
実装しましたところ、うまくTRタグ内に任意の属性を出力することが
出来ました。

下記が実現方法です。
====================================================================
protected override void CreateChildControls()
{

  _DataGridClass2.ItemDataBound +=
    new DataGridItemEventHandlerthis.Item_Bound);
}
public void Item_Bound(Object sender, DataGridItemEventArgs e)
{
 e.Item.Attributes["TANA1"] = "TANA1";
 e.Item.Attributes["YUKI1"] = "YUKI1";

}

====================================================================

出力イメージ

<Table style="Color:Blue";>
 <TR TANA1="TANA1" YUKI1 = "YUKI1">
  <TD>1</TD>
  <TD>2</TD>
  <TD>3</TD>
 </TR>
 <TR TANA1="TANA1" YUKI1 = "YUKI1">
  <TD>4</TD>
  <TD>5</TD>
  <TD>6</TD>
 </TR>
</Table>


大変お忙しい中、貴重なお時間を頂き
ありがとうございました。

これからも、ご指導、ご鞭撻のほど
宜しくお願い致します。
1

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