2014-01-10 6 views
1

По какой-то причине мой пункт привязки к моему ретранслятору просто не стреляет. Я не могу понять, почему. Вот, что у меня есть; (Удалены ненужные вещи)ItemDataBound не стреляет

C# код страницы:

protected void Page_Load(object sender, EventArgs e) 
     { 

      load_Repeater(); 
     } 

     private void load_Repeater() 
     { 
      dtLocations = new components.db.PIDSDB.SubPIDLocationsItemsDataTable(); 
      dtLocations = taLocations.GetLocationsByProductsAndSPID('1', Convert.ToInt32(Request.QueryString["SPID"])); 

      rptFire.DataSource = dtLocations; 
      rptFire.DataBind(); 

     } 

     protected void rptFire_ItemDataBound(object sender, RepeaterItemEventArgs e) 
     { 

      DataRowView nRow = null; 

      switch (e.Item.ItemType) 
      { 
       case ListItemType.Item: 
       case ListItemType.AlternatingItem: 
       Int32 sqrmtr = Convert.ToInt32(nRow["LocationSqrMtr"].ToString()); 
       Int32 mypence = Convert.ToInt32(nRow["PricePerItem"].ToString()); 
       Int32 mandays = Convert.ToInt32(nRow["ManDayPerItem"].ToString()); 

       ((Label)e.Item.FindControl("lblName")).Text = "" + nRow["LocationName"]; 
       ((Label)e.Item.FindControl("lblArea")).Text = "" + nRow["LocationSqrMtr"]; 
       ((Label)e.Item.FindControl("lblCharge")).Text = ""+ Functions.MultiplyNumbers(sqrmtr, mypence); 
       ((Label)e.Item.FindControl("lblPence")).Text = "" + nRow["PricePerItem"]; 
       ((Label)e.Item.FindControl("lblManDays")).Text = "" + Functions.MultiplyNumbers(sqrmtr, mandays); 
       ((Label)e.Item.FindControl("lblCosts")).Text = "WORK OUT"; 
       ((Label)e.Item.FindControl("lblMargin")).Text = "WORK OUT"; 

        break; 
      } 
     } 

В .aspx коде страницы повторителя:

<asp:Repeater runat="server" ID="rptFire" OnItemDataBound="rptFire_ItemDataBound"> 
     <ItemTemplate> 
      <tr> 
       <td><asp:Label runat="server" ID="lblName"></asp:Label></td> 
       <td><asp:Label runat="server" ID="lblArea"></asp:Label></td> 
       <td><asp:Label runat="server" ID="lblCharge"></asp:Label></td> 
       <td><asp:Label runat="server" ID="lblPence"></asp:Label></td> 
       <td><asp:Label runat="server" ID="lblManDays"></asp:Label></td> 
       <td><asp:Label runat="server" ID="lblCosts"></asp:Label></td> 
       <td><asp:Label runat="server" ID="lblMargin"></asp:Label></td> 
      </tr> 
      </ItemTemplate> 
     </asp:Repeater> 

Источник данных и DataBind код работает как раз не ItemDataBound

+0

Какой тип возвращает taLocations.GetLocationsByProductsAndSPID метод и есть ли в нем какие-либо элементы? –

+0

Когда я просматриваю данные на типизированном наборе данных, используя те же переменные, я получаю 4 назад – TMB87

+0

Попробовали отладить код? –

ответ

0

Возможно, вам не хватает AutoEventWireup=true в заголовке страницы в aspx файл.

Edit: Если кнопки обработчики работают, возможно, это проблема с databinging - вы уверены, что вы звоните DataBind на MyRepeater или любой из его родительского контроля? Если вы звоните DataBind вручную, зависит ли он от Page.IsPostBack на вашей странице?

ItemDataBound будет срабатывать только во время DataBinding. Если вы делаете DataBind на PostBack, он должен срабатывать. Однако DataBind не происходит автоматически в PostBack. (Вместо этого Repeater перестраивается из ViewState.) Если нет зависимости от данных, вы должны вместо этого использовать событие ItemCreated. Это срабатывает при создании повторителя, независимо от того, находится ли это во время DataBind или ViewState.