- - PR -
DataGridで1レコードを複数行で表示したい
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-05-07 20:50
件名の通りなのですが、1件のレコードを2行、3行にして表示したいの
ですが、どのようにやればよいのか分かりません。 #プロパティを見ている限りはできなそうな・・・・ |
|
投稿日時: 2003-05-08 08:44
見た目をどのような状態にしたいのか? によると思いまが。。
DataGridのプロパティ→プロパティビルダより、列をテンプレート編集にしてみると 内部の仕組みがHTML側(テンプレートの編集でも見れます。) に書き出されるのでよく分かりますよ。 HTMLをみると、それぞれの列にラベルが配置されていてるのが分かると思いますが、 デフォルトですと1列に1つのラベルですが、それを縦に2つ並べても構わないわけで。 後は、ラベルのプロパティからDataBindを使って任意の値と紐付けをすればよいと思います。 きちんと並べて表示させたければ、テーブルできちんと並べるなど・・・。 これが最良の方法かどうかは分かりませんが、一応言われていることの 解決は出来るとおもいます。 |
|
投稿日時: 2003-05-08 10:32
┏━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━┓
┃ ┣━━━━━━━━╋━━━━━━━━╋━━━━━━━━┫ ┣━━━╋━━━━━━━━╋━━━━━━━━╋━━━━━━━━┫ ┃ ┣━━━━━━━━╋━━━━━━━━╋━━━━━━━━┫ ┣━━━╋━━━━━━━━╋━━━━━━━━╋━━━━━━━━┫ ┃ ┣━━━━━━━━╋━━━━━━━━╋━━━━━━━━┫ ┗━━━┻━━━━━━━━┻━━━━━━━━┻━━━━━━━━┛ 表示したいのはこのような形式で、2行で一レコード分と思っています。 普通の<asp:BoundColumn>の所ではなく、テンプレートの部分で行うのですね。 二行に設定はできましたが、ラベルをDataBindする方法が分かりませんでした。 その部分を勉強してみます。 アドバイスありがとうございました。 また、何かありましたらよろしくお願いします。 |
|
投稿日時: 2003-05-14 16:32
便乗させていただき申し訳ありませんが、わたしも同様に悩んでおります。
もし、解決しておりましたらご教授願いたく投稿させていただきました。 リコさんの表示形式イメージですとセルの結合もしているようですが、 この件についてもご教授お願いいたします。 |
|
投稿日時: 2003-05-14 21:31
こんばんは、meiです。
TemplateColumnを使ってみるのはどうでしょうか? ちょっと長いですが、以下の例では データソースに名前、住所、電話番号が入っていて、 これをデータグリッド上で、 1列目が名前、2列目は住所/電話番号を一緒に表示させています。 中に自由にタグを入れたりも出来るので、 大抵のことはこれで出来ると思います。 -- ここから using System; using System.Text; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace WebApplication3 { /// <summary> /// WebForm1 の概要の説明です。 /// </summary> public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid DataGrid1; private void Page_Load(object sender, System.EventArgs e) { // 表示用のテストデータ DataTable tab = new DataTable(); tab.Columns.Add(new DataColumn("Name", typeof(string))); tab.Columns.Add(new DataColumn("Address", typeof(string))); tab.Columns.Add(new DataColumn("Tel", typeof(string))); DataRow row; row = tab.NewRow(); row["Name"] = "太郎"; row["Address"] = "東京"; row["Tel"] = "03-xxxx-xxxx"; tab.Rows.Add(row); row = tab.NewRow(); row["Name"] = "次郎"; row["Address"] = "北海道"; row["Tel"] = "011-xxx-xxxx"; tab.Rows.Add(row); // データグリッドのカラム設定 BoundColumn bc = new BoundColumn(); bc.HeaderText = "名前"; bc.DataField = "Name"; DataGrid1.Columns.Add(bc); TemplateColumn tc =new TemplateColumn(); tc.HeaderText = "住所/電話番号"; tc.ItemTemplate = new MyColumn(new string[] {"Address", "Tel"}); DataGrid1.Columns.Add(tc); DataGrid1.DataSource = tab; DataGrid1.DataBind(); } #region Web フォーム デザイナで生成されたコード override protected void OnInit(EventArgs e) { // // CODEGEN: この呼び出しは、ASP.NET Web フォーム デザイナで必要です。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } public class MyColumn : ITemplate { string[] columns; //private bool validate; public MyColumn(string[] columns) { this.columns = columns; } public void InstantiateIn(Control container) { Literal l = new Literal(); l.DataBinding += new EventHandler(this.BindData); container.Controls.Add(l); } public void BindData(object sender, EventArgs e) { Literal l = (Literal) sender; DataGridItem container = (DataGridItem) l.NamingContainer; StringBuilder sb = new StringBuilder(); sb.Append(((DataRowView) container.DataItem)[columns[0]].ToString()); for (int i = 1; i < columns.Length; ++i) { sb.AppendFormat("<br>{0}", (((DataRowView) container.DataItem)[columns[i]].ToString())); } l.Text = sb.ToString(); } } } -- ここまで TemplateColumnは便利ですよ。 データをいじらずに表示時に、 サニタイジングさせたりとかも出来たりとかも出来るし。 |
|
投稿日時: 2003-05-14 21:36
蛇足かも知れませんが、
DataGridのプロパティ「AutoGenerateColumns」は"False"にして下さい。 ついでに、一番最後の、 >サニタイジングさせたりとかも出来たりとかも出来るし。 日本語変ですね。(汗) |
|
投稿日時: 2003-05-15 09:16
meiさんご丁寧にありがとうございます。
シンプルにASPX上(HTML)にてできないものでしょうか? |
|
投稿日時: 2003-05-15 09:39
こんにちは、meiです。
申し訳ないですがASPX上で行う方法は、やってないです。 グリッドの表示内容を動的に変更させるプログラムを組んでいたため、 ASPXに静的に書くことは考えていなかったので。 ただ、動的に表示させる方法を調べる過程で、 ASPX上でTemplateColumnを使う方法は結構あったので、 「ASP .NET DataGrid TemplateColumn」あたりで検索すれば、 何かひっかかるかも。 |