這是ListView模板里的代碼,貼一下,方便理解:
方案一:
復制代碼 代碼如下:
SPAN style="FONT-SIZE: 15px">就是想把DeleteButton 和EditButton 2個按鈕隱藏/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>
一開始,覺得這挺簡單,就寫下了下面的代碼:
復制代碼 代碼如下:
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;
}
}
可是,當運行的時候,就開始報錯說,將對象引用設置到對象的實例。就是說沒有找到這個控件,我就很奇怪了,覺得很沒有道理。按理ItemCreated是在初始化行之后,然后進行找控件,應該沒問題。
這個問題,想了很久,沒有結果,然后就和我一個同學(他技術不錯)開始討論,剛開始他說是,就是說當運行頁面的時候,在
去查看源碼帶的時候,發現DeleteButton這個控件的ID 變樣了,變成了ListView1_ctrl0_DeleteButton這樣子。對于這個問題,
我一直到現在還沒有想通,不知道MS怎么會搞這個出來?服務器控件不是好好的渲染到頁面了,怎么變ID了呢?沒理由。呵呵~~
然后,我同學經過調試后,給出了一個解決方案是:
復制代碼 代碼如下:
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")
{
if (DeleteButton != null EditButton != null)
{
EditButton.Visible = false;
DeleteButton.Visible = false;
}
}
}
這樣子就可以了。就是多加了一句:if (DeleteButton != null EditButton != null)的判斷。
方案二:
很有才的是,我宿舍的一位河北的同學也給出了一種解決方案,不過這種寫法看起來有點不可思議,呵呵,一起看看
吧!
復制代碼 代碼如下:
asp:Button ID="DeleteButton" runat="server" Visible='%#Session["username"]=="admin"?true:false %>'
就是這樣子,也可以把控件給隱藏。因為session是全局變量,所以可以在頁面中取到這個值。
作者:Lanny☆蘭東才
您可能感興趣的文章:- listview 選中高亮顯示實現方法
- Android ListView數據綁定顯示的三種解決方法
- Android通過LIstView顯示文件列表的兩種方法介紹
- android開發教程之listview顯示sqlite數據
- Android ListView中動態顯示和隱藏Header&Footer的方法
- Android編程實現Listview點擊展開和隱藏的方法
- Android中ListView Item布局優化技巧
- android動態布局之動態加入TextView和ListView的方法
- ListView的Adapter使用(綁定數據) 之 自定義每一項的布局去綁定數據
- 神奇的listView實現自動顯示隱藏布局Android代碼