如何根据表中存储的数据在中继器中隐藏和显示标签
本文关键字:隐藏 中继器 标签 显示 何根 存储 数据 | 更新日期: 2023-09-27 17:54:32
我有两个标签(label4和label5),其中文本是从存储在表(tblp)的b列和c列的数据中检索的。标签存在于中继器控件中,现在根据存储在同一表的列d中的数据,我试图在页面加载时显示和隐藏label4和label5的文本,规则如下:
- 如果列d包含字母s,则两个标签文本都应该可见。
- 如果列d包含字母h,则两个标签文本应该不可见。
- 如果列d包含字母u,则两个标签文本都应该可见。
问题是,当尝试使用标签作为我所创建的方法的参数时,标签显示错误。
下面给出了我所做的代码示例。
HTML <asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%#Eval("b") %>'></asp:Label>
<asp:Label ID="Label5" runat="server" Text='<%#Eval("c") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
背后的代码 protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = j.getentry(Label4.Text, Label5.Text);
if (dt.Rows.Count>0)
{
if (dt.Rows[0]["d"].ToString() == "s")
{
DataTable dp = j.getall();
if (dp.Rows.Count > 0)
{
Repeater1.DataSource = dt; /*To show text*/
Repeater1.DataBind();
}
}
else if (dt.Rows[0]["d"].ToString() == "h")
{
Label4.Visible = false;
Label5.Visible = false; /*To hide text*/
}
else if (dt.Rows[0]["d"].ToString() == "u")
{
DataTable dp = j.getall();
if (dp.Rows.Count > 0)
{
Repeater1.DataSource = dt; /*To show text*/
Repeater1.DataBind();
}
}
}
}
方法
public DataTable getentry(string b, string c)
{
SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnection"].ConnectionString);
string sql = "select *from tblp where b=@b and c=@c ";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.AddWithValue("@b", b);
cmd.Parameters.AddWithValue("@c", c);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
public DataTable getall()
{
SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnection"].ConnectionString);
string sql = "select a,b,c from tblp";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dp = new DataTable();
da.Fill(dp);
return dp;
}
另一个解决方案是
1。在中继器内放置一个HiddenField
,并像这样使用Repeater_ItemDataBound
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<asp:HiddenField runat="server" ID="hidd1" Value='<%#Eval("d") %>' />
<asp:Label ID="Label4" runat="server" Text='<%#Eval("b") %>'></asp:Label>
<asp:Label ID="Label5" runat="server" Text='<%#Eval("c") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
- 使用
Repeater1_ItemDataBound
遍历每个中继器项目,并通过检查条件将可见性设置为true或false
更新:因为你是强列D值隐藏字段,没有必要比较你的值像这样(dt.Rows[0]["d"].ToString() == "h")
您可以直接比较每个项绑定中隐藏字段中存储的值
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
string hidd1 = ((HiddenField)(e.Item.FindControl("hidd1"))).Value; // find hidden field
Label l1 = (Label)(e.Item.FindControl("Label4"));// find lable4 value
Label l2 = (Label)(e.Item.FindControl("Label4"));//// find lable5 value
if (hidd1.ToLower == "s")// your conditon
{
l1.Visible = true;// your code1
l2.Visible = true;
}
else if (hidd1.ToLower == "h")
{
l1.Visible = false;// your code2
l2.Visible = false;
}
else
{
// defalut
}
}
如果你仍然有疑问,请阅读更多关于Repeater的内容。这里的itemdataboundevent
可以使用Visible
属性
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Visible='<%# Convert.ToBoolean(Eval("SomeCondition")) %>' Text='<%#Eval("b") %>'></asp:Label>
<asp:Label ID="Label5" runat="server" Visible='<%# Convert.ToBoolean(Eval("SomeCondition")) %>' Text='<%#Eval("c") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
try this
else if (dt.Rows[0]["d"].ToString() == "h")
{
(Label)(Repeater1.FindControl("Label4")).Visible = false;
(Label)(Repeater1.FindControl("Label5")).Visible = false; /*To hide text*/
}