Получение имени строки в DataList - PullRequest
0 голосов
/ 21 сентября 2009

У меня есть datalist, и я хотел бы извлечь имена строк из таблицы, из которой я получаю свои значения для datalist. Вот пример того, что я хотел бы сделать.

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

Ответы [ 2 ]

0 голосов
/ 21 сентября 2009

Если вы используете 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);
            }
        }
    }
0 голосов
/ 21 сентября 2009

Вы могли бы сделать следующее, но я сомневаюсь, что это сработает. Я не верю, что DataItems доступны в момент создания заголовка.

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

Если это работает, вы можете просмотреть эту коллекцию и проверить свойство каждого элемента ColumnName.

Лучше было бы:

  1. Создайте свойство в codebehind, которое возвращает List<string> соответствующих заголовков столбцов. Вы можете ссылаться на это свойство в разметке при объявлении заголовка.
  2. Добавить обработчик для события ItemDataBound и создания заголовка ловушки. Вам все еще понадобится способ ссылки на элементы данных, которые, возможно, еще не были подготовлены к этому моменту.
...