【问题标题】:how bind DataList template field in asp.net如何在 asp.net 中绑定 DataList 模板字段
【发布时间】:2012-12-08 08:30:29
【问题描述】:

我想将一个标签 -i created- 在 Datalist 模板中绑定到 col -named "item"-in my dataSource

经过多次尝试,我使用了以下代码

        DataList2.DataSource = dt;  // my DataSource
        Label l1 = (Label)DataList2.FindControl("itemLabel");
        l1.Text = dt.Rows[0]["item"].ToString();
        DataList2.DataBind();

我在第 3 行遇到以下错误,我正在寻找正确的表达方式

Object reference not set to an instance of an object.

任何帮助将不胜感激..

【问题讨论】:

  • 可能会发生两件事。您的标签为空或您的数据表为空。哪一个?

标签: asp.net templates bind datalist


【解决方案1】:

标签为空,因为它的NamingConainer(用于FindControl)不是DataList,而是其中一个DataListItemsDataList 用于多个项目)。

所以你需要先DataBind它,然后你才能处理它的ItemDataBound事件。在那里你可以找到标签和底层DataItem

void Item_Bound(Object sender, DataListItemEventArgs e)
{
   if (e.Item.ItemType == ListItemType.Item || 
       e.Item.ItemType == ListItemType.AlternatingItem)
   {

    // Retrieve the Label control in the current DataListItem.
    Label itemLabel= (Label)e.Item.FindControl("itemLabel");
    DataRow row = ((DataRowView)e.Item.DataItem).Row;
    String item = row.Field<string>("item");
    itemLabel.Text = item;
 }
}

【讨论】:

  • 如果问题出在多项目上,我们可以使用 foreach(DataListItem in Datalist2.items) 之类的东西,然后进行绑定,但是我尝试过,但代码表达式不正确
  • 你也可以DataBindDataListforeach后面的项目:foreach(DataListItem item in DataList2.Items){}。但出于两个原因,我会使用ItemDataBound。它将确保代码将始终在数据绑定上执行,并且由于循环不是额外循环(每个项目都会调用Item_Bound),因此效率很高。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2013-03-15
相关资源
最近更新 更多