在DataList中获取Row的名称

时间:2009-09-20 21:56:32

标签: asp.net templates header datalist

我有一个数据列表,并希望从表格中提取我从数据列表中获取值的行名称。这是我想做的一个例子。

<HeaderTemplate>
    'Get data row names
'Maybe something like Container.DataItem(row)?
    </HeaderTemplate>

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作,但我怀疑它是否有效。我不相信DataItems在创建Header时可用。

((DataRowView)Container.DataItem).DataView.Table.Columns

如果这样做,您可以遍历此集合并检查每个项目的ColumnName属性。

更好的想法是:

  1. 在codebehind中创建一个返回List<string>个适当列标题的属性。当您声明标题时,可以在标记中引用此属性。
  2. 为ItemDataBound事件和陷阱头创建添加处理程序。您仍然需要一种方法来引用数据元素,此时可能尚未准备好。

答案 1 :(得分:0)

如果您使用DataTable作为数据列表的数据源,则可以使用OnItemCreated方法并为ItemCreated事件提供自定义处理程序以添加列标题值。我不确定你为什么要这样做。听起来RepeaterGridView可能更适合您的需求。无论如何,这是代码。

<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);
            }
        }
    }