2013-07-01 20 views
0

嘿傢伙我做了一箇中繼器,顯示員工ID和他在特定月份的葉子。現在我的轉發器正常工作。只是我想顯示用戶在文本框中輸入的empID作爲中繼器標題。 我的中繼器的代碼是顯示作爲中繼器頭模板的文本框值

> <table class="table1" > 
>  <asp:Repeater ID="Repeater1" runat="server"> 
>  <HeaderTemplate> 
>   <tr> 
>     <td>EmpID</td> 
>  </HeaderTemplate> 
>  <ItemTemplate> 
>   <td><asp:Label ID="lblmonths" runat="server" Text='<%# Eval("Monthnames") %>' ></asp:Label></td> 
>  </ItemTemplate> 
>  <FooterTemplate> 
>    </tr> 
>  </FooterTemplate> 
     </asp:Repeater> 
>     <asp:Repeater ID="Repeater2" runat="server" > 
>     <HeaderTemplate> 
>     <tr> 
>       <td><asp:Label ID="empID" runat="server" Text='<%# Eval("EmpID") %>' ></asp:Label></td> 
>     </HeaderTemplate> 
>      <ItemTemplate> 
>       <td><asp:Label ID="leave" runat="server" Text='<%# Eval("Leaves") %>' ></asp:Label></td> 
>      </ItemTemplate> 
>      <FooterTemplate> 
>     </tr>   
>      </FooterTemplate> 
>     </asp:Repeater> 
>     
>    
>  </table> 

和我的代碼背後,是

string cmdText3 = "select count(*) as Leaves from attendance where empid = '" + empID.Value + "' and extract(month from LeaveDate) between 1 and 6 group by extract(month from LeaveDate)"; 
       MySqlCommand cmd3 = new MySqlCommand(cmdText3, cnx); 
       MySqlDataAdapter adapter3 = new MySqlDataAdapter(); 
       DataSet ds3 = new DataSet(); 
       adapter3.SelectCommand = cmd3; 
       adapter3.Fill(ds3); 
       DataTable dt3 = ds3.Tables[0]; 
       Repeater2.DataSource = dt3; 
       Repeater2.DataBind(); 

我在這裏展示6個月。現在這個代碼工作正常,但不顯示EmpID。你能告訴我如何從這個標籤(<asp:Label ID="empID" runat="server" Text='<%# Eval("EmpID") %>' ></asp:Label>)的文本框中顯示empID。我不熟悉在後面的代碼中顯示的數據表。可能會添加一個列會有幫助。我試過但沒有發生任何事情。你能幫助我嗎?

回答

0

首先使用訪問現場,這不是」看起來你正在返回一個名爲「EmpID」的列。這是你的SQL語句的一個問題,恕我直言,超出了這個問題的範圍。這就是說,一旦你修復了SQL,這裏是你如何去綁定中繼器頭部的標籤。

您可以使用中繼器的OnItemDataBound方法並查找Headere.Item.ItemType

首先,將中繼器綁定到OnItemDataBound事件。

  1. 客戶端:

    <asp:Repeater ID="rptSample" runat="server" OnItemDataBound="rptSample_ItemDataBound"> 
    
  2. 服務器端:

    protected override void OnInit(EventArgs e) 
    { 
        base.OnInit(e); 
        this.rptSample.ItemDataBound += rptSample_ItemDataBound; 
    } 
    

然後,你需要檢查你可以在客戶端或服務器端做到這一點ItemDataBound方法中綁定的項目類型。像這樣:

protected void rptSample_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Header) 
     { 

     } 
    } 

爲了能夠從rptSample_ItemDataBound方法內部訪問數據源(dt3),你需要使它成爲一個頁面級的變量。因此,改變下面一行:

DataTable dt3 = ds3.Tables[0]; 

將下面的一行所以它是一個頁面級的變量

DataTable dt3 = null; 

和DT3分配行改成這樣:

dt3 = ds3.Tables[0]; 

然後你ItemDataBound方法將如下所示:

protected void rptSample_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Header) 
     { 
      ((Label)e.Item.FindControl("lblmonths")).Text = dt3.Rows[0]["EmpId"].ToString(); 
     } 
    } 
+0

謝謝@Shai Cohen :) – user2527367

+0

很高興能幫到:) –

+0

嘿,人正在爲我的項目工作,並且卡在我的最後一頁,我無法完成它。我已經發布了另一個問題,你可以看看它並幫助我。這裏是鏈接http://stackoverflow.com/questions/17432801/nested-repeater-to-display-data – user2527367

1

儘量不使用<%#Eval %>語法在HeaderTemplate, 則應該嘗試定義一些方法財產來訪問你想<%=MyEmpIdProperty %>

相關問題