データリストがあり、データリストの値を取得しているテーブルから行名を取得したいと考えています。これが私がやりたいことの例です。
<HeaderTemplate>
'Get data row names
'Maybe something like Container.DataItem(row)?
</HeaderTemplate>
データリストのデータソースとしてDataTableを使用している場合は、OnItemCreated
メソッドを使用して、イベントのカスタムハンドラーを提供しItemCreated
、列ヘッダー値を追加できます。なぜあなたがこれをしたいかわかりません。リピーターまたはGridViewがニーズに適しているようです。とにかく、ここにコードがあります。
<asp:DataList ID="DataList1" runat="server" OnItemCreated="DataList1_ItemCreated"
ShowHeader="true" >
<HeaderTemplate>
</HeaderTemplate>
</asp:DataList>
protected void Page_Load(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()))
{
conn.Open();
SqlCommand comm = new SqlCommand("SELECT [id], [name], [email], [street], [city] FROM [employee_tbl]", conn);
SqlDataAdapter da = new SqlDataAdapter(comm);
da.Fill(dt);
}
DataList1.DataSource = dt;
DataList1.DataBind();
}
protected void DataList1_ItemCreated(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
foreach (DataColumn col in dt.Columns)
{
Literal lit = new Literal();
lit.Text = col.ColumnName;
e.Item.Controls.Add(lit);
}
}
}
次のことができますが、うまくいくとは思えません。ヘッダーが作成されている時点で DataItems を使用できるとは思いません。
((DataRowView)Container.DataItem).DataView.Table.Columns
これが機能する場合は、このコレクションをループして、各項目の ColumnName プロパティを調べることができます。
より良いアイデアは、次のいずれかです。
List<string>
適切な列ヘッダーを返す分離コードでプロパティを作成します。ヘッダーを宣言するときに、マークアップでこのプロパティを参照できます。