隐藏具有条件的转发器元素

时间:2013-11-09 12:34:26

标签: c# asp.net repeater

我想要隐藏已经添加到表格中的转发器元素,但现在我遇到了一些问题,即使我为比较条件做了,转发器也会根据表格显示整体内容。这是我的编码部分。希望会知道我犯的错误。

设计师代码:

<script language="C#" runat="server">
protected void ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        String personID = "";
        try
        {
            MySql.Data.MySqlClient.MySqlConnection connStr = new MySql.Data.MySqlClient.MySqlConnection();
            connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;";
            String searchPerson = "SELECT PersonIDB from contactFriend WHERE PersonID = @id";
            MySql.Data.MySqlClient.MySqlCommand cmdSearch = new MySql.Data.MySqlClient.MySqlCommand(searchPerson, connStr);
            connStr.Open();
            cmdSearch.Parameters.AddWithValue("@id", "M000001");


            MySql.Data.MySqlClient.MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();

            if (dtrRead2.Read())
            {
                personID = (String)dtrRead2["PersonIDB"];
            }

            dtrRead2.Close();
            connStr.Close();                
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.ToString());
        }

        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Label lblID = (Label)e.Item.FindControl("lblID");
            string s = lblID.Text;

            if (s == personID)
            {
                lblID.Visible = false;
                e.Item.FindControl("photoImage").Visible = false;
                e.Item.FindControl("lblName").Visible = false;
                e.Item.FindControl("deleter").Visible = false;
                e.Item.FindControl("lblEmail").Visible = false;
            }
            else
            {
                lblID.Visible = true;
                e.Item.FindControl("photoImage").Visible = true;
                e.Item.FindControl("lblName").Visible = true;
                e.Item.FindControl("deleter").Visible = true;
                e.Item.FindControl("lblEmail").Visible = true;
            }
        }

    }
  </script>

<asp:Repeater ID="friendRepeater" runat="server" OnItemDataBound = "ItemDataBound">
    <HeaderTemplate>
    <table cellpadding="0" cellspacing="0">
    </HeaderTemplate>


    <ItemTemplate>
    <tr>
       <td>
       <div style=" padding-left:180px;"> 
           <div id="leftHandPost" style="float:left; width:120px; height:120px; border: medium solid #cdaf95; padding-top:5px;">
              <div id="childLeft" style=" padding-left:5px;">
                 <div id="photo"  style=" border: thin solid black; width:100px;height:100px;">
                   <asp:Image id="photoImage" runat="server" ImageUrl='<%# String.Concat("Images/", Eval("Picture")) %>' Width="100px" Height="100px" />
                 </div>
               </div><!--childLeft-->
            </div><!--leftHandPost-->
            </div>
        </td>

                        <td>
                            <div id="rightHandPost" style=" float:right; padding-right:260px;">
                                <div id="childRight" style="width:400px; height:120px; border: medium solid #cdaf95; padding-top:5px; padding-left:10px;">
                                    <strong><asp:Label id="lblName" runat="server"><%# Eval("PersonName") %></asp:Label></strong><br />
                                    <div style=" float:right; padding-right:10px;">

                                    <asp:ImageButton id="deleter" ImageUrl="App_Themes/Health/images/blue/Add.png" CausesValidation="False" runat="server"
                        AlternateText="Add" ImageAlign="absmiddle" BorderStyle="None" Width="21" Height="21"
                         OnCommand="add" OnClientClick="return confirm('Are you sure you want to add this?');" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "PersonID") %>' />
                         </div><br />
                                    <asp:Label id="lblID" runat="server"><%# Eval("PersonID") %></asp:Label><br />
                                    <asp:Label id="lblEmail" runat="server"><%# Eval("Email") %></asp:Label>
                                </div><!--childRight-->
                            </div><!--rightHandPost-->
                        </td>
                    </tr>

    </ItemTemplate>

    <AlternatingItemTemplate>
    <tr>
       <td>
       <div style=" padding-left:180px;"> 
           <div id="Div1" style="float:left; width:120px; height:120px; border: medium solid #cdaf95; padding-top:5px;">
              <div id="Div2" style="padding-left:5px;">
                 <div id="Div3"  style=" border: thin solid black; width:100px;height:100px;">
                   <asp:Image id="photoImage" runat="server" ImageUrl='<%# String.Concat("Images/", Eval("Picture")) %>' Width="100px" Height="100px" />
                 </div>
               </div><!--childLeft-->
            </div><!--leftHandPost-->
        </div>
        </td>

                        <td>
                            <div id="Div4" style=" float:right; padding-right:260px;">
                                <div id="Div5" style="width:400px; height:120px; border: medium solid #cdaf95; padding-top:5px; padding-left:10px;">
                                    <strong><asp:Label id="lblName" runat="server"><%# Eval("PersonName")%></asp:Label></strong>
                                    <div style=" float:right; padding-right:10px;">
                                    <asp:ImageButton id="deleter" ImageUrl="App_Themes/Health/images/blue/Add.png" CausesValidation="False" runat="server"
                        AlternateText="Add" ImageAlign="absmiddle" BorderStyle="None" Width="21" Height="21"
                         OnCommand="add" OnClientClick="return confirm('Are you sure you want to add this?');" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "PersonID") %>' />
                         </div><br />
                                    <br />
                                    <asp:Label id="lblID" runat="server"><%# Eval("PersonID") %></asp:Label><br />
                                    <asp:Label id="lblEmail" runat="server"><%# Eval("Email") %></asp:Label>
                                </div><!--childRight-->
                            </div><!--rightHandPost-->
                        </td>
                    </tr>
    </AlternatingItemTemplate>

    <FooterTemplate>
    </table>
    </FooterTemplate>

</asp:Repeater>

对于PageLoad:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            try
            {
                MySqlConnection connStr = new MySqlConnection();
                connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;";
                String searchOverall = "SELECT PersonID, PersonName, Email, Picture FROM Person";
                MySqlCommand cmdSearch = new MySqlCommand(searchOverall, connStr);
                connStr.Open();

                MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();
                friendRepeater.DataSource = dtrRead2;
                friendRepeater.DataBind();
                dtrRead2.Close();
                dtrRead2 = null;

                connStr.Close();

            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.ToString());
            }            
        }             
    }

2 个答案:

答案 0 :(得分:2)

尝试使整个项目不可见而不是一件一件,如下所示:

if (s == personID)
{
    e.Item.Visible = false;
}

或者,您可以在绑定到转发器控件之前按条件筛选结果。

答案 1 :(得分:0)

我认为你应该过滤SQL查询中的数据,只将想要的数据绑定到转发器。

我假设您要隐藏已添加到 contactFriend 表格的行,方法是填写 PersonIDB 日期值,不是吗? ?

如果是这样,您应该将SQL查询字符串更改为

SELECT p.PersonID, p.PersonName, p.Email, p.Picture 
 FROM Person AS p JOIN contactFriend AS cf ON p.PersonID = cf.PersonID 
 WHERE cf.PersonIDB IS NOT NULL AND cf.[date] IS NOT NULL

如果你在contactFriend表中没有PersonID数据,那么这是其他过滤的查询,直到你添加PersonIDB值(我的意思是你插入PersonID togather with PersonIDB来创建当时的新行)

SELECT PersonID, PersonName, Email, Picture 
FROM Person 
WHERE PersonID NOT IN (SELECT PersonID FROM contactFriend)