0

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

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

2 回答 2

0

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

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

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

一个更好的主意是:

  1. 在代码隐藏中创建一个属性,该属性返回一个List<string>适当的列标题。当您声明标头时,您可以在标记中引用此属性。
  2. 为 ItemDataBound 事件和陷阱标头创建添加处理程序。您仍然需要一种方法来引用数据元素,此时可能尚未准备好。
于 2009-09-20T22:26:48.050 回答
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);
            }
        }
    }
于 2009-09-21T00:34:44.373 回答