将文本框值显示为Repeater Header Template

时间:2013-07-01 18:11:41

标签: asp.net datatable repeater asprepeater

嘿伙计们我制作了一个转发器,显示了员工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。我不熟悉后面的代码中显示的数据表。可能会添加一个列有帮助。我试过但没有发生任何事情。你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

尽量不要在<%#Eval %>中使用HeaderTemplate语法, 您应该尝试定义一些方法属性来访问您尝试使用<%=MyEmpIdProperty %>

访问的字段

答案 1 :(得分:0)

首先,它看起来不像是要返回名为“EmpID”的列。这是您的SQL语句的问题,而且,恕我直言,这不在本问题的范围内。话虽这么说,一旦你修复了SQL,这就是你如何在转发器的标题中绑定标签。

您可以使用转发器的OnItemDataBound方法并查找e.Item.ItemType的{​​{1}}。

首先,将转发器绑定到Header事件。您可以在客户端或服务器端执行此操作:

  1. 客户端:

    OnItemDataBound
  2. 服务器端:

    <asp:Repeater ID="rptSample" runat="server" OnItemDataBound="rptSample_ItemDataBound">
    
  3. 然后,您需要检查ItemDataBound方法中绑定的项目类型。像这样:

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

    为了能够从 protected void rptSample_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Header) { } } 方法内部访问数据源(dt3),您需要将其设置为页面级变量。所以改变以下行:

    rptSample_ItemDataBound

    放置以下行,使其成为页面级变量

    DataTable dt3 = ds3.Tables[0];
    

    并将dt3赋值行更改为:

     DataTable dt3 = null; 
    

    然后你的ItemDataBound方法将如下所示:

    dt3 = ds3.Tables[0];