我想隐藏已经添加到表格中的repeater元素,但现在我遇到了一些问题,即使是我为比较条件所做的,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());
}
}
}发布于 2013-11-09 20:42:04
尝试将整个项目设置为不可见,而不是逐段显示,如下所示:
if (s == personID)
{
e.Item.Visible = false;
}或者,也可以在绑定到中继器控件之前按条件筛选结果。
发布于 2013-11-10 14:37:52
我认为您应该过滤SQL查询中的数据,以便只将需要的数据绑定到中继器。
我假设您想通过填充contactFriend和date值来隐藏已经添加到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如果您在添加PersonIDB值之前从未在contactFriend表中拥有PersonID数据,那么这是另一个要使用的过滤查询(我的意思是,您插入PersonID与PersonIDB一起使用,以便在那时创建新行)
SELECT PersonID, PersonName, Email, Picture
FROM Person
WHERE PersonID NOT IN (SELECT PersonID FROM contactFriend)https://stackoverflow.com/questions/19875998
复制相似问题