嘿伙计们我制作了一个转发器,显示了员工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 :(得分:1)
尽量不要在<%#Eval %>
中使用HeaderTemplate
语法,
您应该尝试定义一些方法或属性来访问您尝试使用<%=MyEmpIdProperty %>
答案 1 :(得分:0)
首先,它看起来不像是要返回名为“EmpID”的列。这是您的SQL语句的问题,而且,恕我直言,这不在本问题的范围内。话虽这么说,一旦你修复了SQL,这就是你如何在转发器的标题中绑定标签。
您可以使用转发器的OnItemDataBound方法并查找e.Item.ItemType
的{{1}}。
首先,将转发器绑定到Header
事件。您可以在客户端或服务器端执行此操作:
客户端:
OnItemDataBound
服务器端:
<asp:Repeater ID="rptSample" runat="server" OnItemDataBound="rptSample_ItemDataBound">
然后,您需要检查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];