如何根据表中存储的数据在中继器中隐藏和显示标签

本文关键字:隐藏 中继器 标签 显示 何根 存储 数据 | 更新日期: 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*/
        }