關(guān)于ListView下隱藏控件的解決方案分享
2024-07-10 12:41:29
供稿:網(wǎng)友
這是ListView模板里的代碼,貼一下,方便理解:
方案一:
代碼如下:
<SPAN style="FONT-SIZE: 15px">就是想把DeleteButton 和EditButton 2個(gè)按鈕隱藏</SPAN>
代碼如下:
<ItemTemplate>
<tr>
<td>
<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="刪除" />
<asp:Button ID="EditButton" runat="server"
CommandName="Edit" Text="編輯" />
</td>
<td style="">
<div style="width: 30px;">
<asp:Label ID="UserNameLabel" runat="server" Text='<%# Eval("UserName") %>' Width="30px" /></div>
</td>
<td>
<asp:Label ID="AgeLabel" runat="server" Text='<%# Eval("Age") %>' />
</td>
<td>
<asp:Label ID="IdentityCardLabel" runat="server" Text='<%# Eval("IdentityCard") %>' />
</td>
<td>
<asp:Label ID="LoginDateLabel" runat="server" Text='<%# Eval("LoginDate","{0:yyyy-MM-dd}") %>' />
</td>
<td>
<asp:Label ID="LeaveDateLabel" runat="server" Text='<%# Eval("LeaveDate","{0:yyyy-MM-dd}") %>' />
</td>
<td>
<asp:Label ID="PopulationLabel" runat="server" Text='<%# Eval("Population") %>' />
</td>
<td>
<asp:Label ID="HouseIDLabel" runat="server" Text='<%# Eval("HouseID") %>' />
</td>
</tr>
</ItemTemplate>
一開始,覺得這挺簡(jiǎn)單,就寫下了下面的代碼:
代碼如下:
protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
Button DeleteButton = (Button)ListView1.FindControl("DeleteButton");
Button EditButton = (Button)ListView1.FindControl("EditButton");
string username = Session["username"].ToString();
if (username != "admin")
{
EditButton.Visible = false;
DeleteButton.Visible = false;
}
}
可是,當(dāng)運(yùn)行的時(shí)候,就開始報(bào)錯(cuò)說,將對(duì)象引用設(shè)置到對(duì)象的實(shí)例。就是說沒有找到這個(gè)控件,我就很奇怪了,覺得很沒有道理。按理ItemCreated是在初始化行之后,然后進(jìn)行找控件,應(yīng)該沒問題。
這個(gè)問題,想了很久,沒有結(jié)果,然后就和我一個(gè)同學(xué)(他技術(shù)不錯(cuò))開始討論,剛開始他說是,就是說當(dāng)運(yùn)行頁(yè)面的時(shí)候,在
去查看源碼帶的時(shí)候,發(fā)現(xiàn)DeleteButton這個(gè)控件的ID 變樣了,變成了ListView1_ctrl0_DeleteButton這樣子。對(duì)于這個(gè)問題,
我一直到現(xiàn)在還沒有想通,不知道MS怎么會(huì)搞這個(gè)出來?服務(wù)器控件不是好好的渲染到頁(yè)面了,怎么變ID了呢?沒理由。呵呵~~
然后,我同學(xué)經(jīng)過調(diào)試后,給出了一個(gè)解決方案是:
代碼如下:
protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
Button DeleteButton = (Button)ListView1.FindControl("DeleteButton");
Button EditButton = (Button)ListView1.FindControl("EditButton");