2012-11-10 30 views
0

我有一個ListView,它填充了從MySql數據庫加載的DataSet中的數據。 ListView顯示稍後創建文件的文本模塊列表。這裏是ListView定義:如何根據ASP.NET中的內容更改ListView中圖像的CSS類別// C#

<asp:ListView ID="addTextModuleList" runat="server" OnItemCommand="addTextModuleList_OnItemCommand" DataKeyNames="ID" >   
    <ItemTemplate> 
     <asp:LinkButton ID="addTextModuleButton" runat="server" CssClass="insertTextModuleButtonFade" CommandName="insertTextModule"></asp:LinkButton> 
     <div id="listViewId" runat="server" style="float:left; width:24px; height:16px; margin:2px 15px 5px 0px; text-align:right;"><%# Eval("ID") %></div> 
     <div style="float:left; width:200px; height:25px; margin:2px 10px 5px 0px; text-align:left; font-weight:bold;"><%# Eval("shortName") %>:</div> 
     <div style="float:left; width:700px; margin:5px;"><%# Eval("fullName") %></div> 
     <div class="clear"></div> 
    </ItemTemplate>   
</asp:ListView> 

我想通過點擊圖標來textModules添加到確認。這是我的問題。圖標必須以不同的顏色顯示,具體取決於文本模塊是否已添加。該圖標加載爲asp:Linkbutton,我有一個CSS類用於顯示綠色圖標,另一個CSS類用於淡灰色的相同圖標。

我可以通過點擊更改圖標的CssClass,但我不知道如何在加載PageListView時更改圖標的CssClass。有任何想法嗎?

這裏是我的代碼隱藏DataSet

protected void executeTemplateSelection() 
    { 
     // connect to database 
     MySqlConnection con = new MySqlConnection(); 
     con.ConnectionString = Helper.CONNECTION_STRING; 
     MySqlCommand cmd = null; 

     // load customer textModules 
     con.Open(); 
     cmd = new MySqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = "SELECT * FROM textmodule WHERE ID IN " + Session["loadTextModuleTemplates"].ToString(); 
     MySqlDataAdapter sda = new MySqlDataAdapter(cmd); 
     DataSet ds = new DataSet();   
     sda.Fill(ds); 
     addTextModuleList.DataSource = ds; 
     addTextModuleList.DataBind(); 
     con.Close(); 

     cmd = new MySqlCommand(); 
     con.Open(); 
     cmd.Connection = con; 
     cmd.CommandText = "SELECT * FROM linktextmodule WHERE confirmationId = " + Session["currentConfirmationId"].ToString(); 
     MySqlDataReader mdr = cmd.ExecuteReader(); 
     ds.Tables[0].Columns.Add("alreadyAdded"); 

     while (mdr.Read()) 
     {    

      for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
      { 
       if (mdr["textModule"].Equals(ds.Tables[0].Rows[i]["ID"])) 
       { 
        ds.Tables[0].Rows[i]["alreadyAdded"] = "yes";      
       } 
      } 

     } 

    } 

回答

2

您可以實現ListView.ItemDataBound事件(見http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound%28v=vs.100%29.aspx),這將讓你爲它必將改變對控件的屬性爲每個項目。我以前使用過這種方法。

您也可以直接在CssClass屬性中嘗試使用數據綁定語法(<%#%>),但我不確定它是否在CssClass屬性內工作,就像它在其他屬性中一樣。你已經在div裏面做了這個,但是看例如http://support.microsoft.com/kb/307860他們在屬性中給出了一個例子。

+0

非常感謝。 ListView.ItemDataBound的解決方案正是我正在尋找的。 – user1814545

相關問題