2012-11-10 3 views
0

ListViewDataSet의 데이터가로드되어 MySql 데이터베이스에서로드되었습니다. 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를 추가 할 다음은 ListView 정의입니다. 그리고 그것은 내 문제입니다. 텍스트 모듈이 이미 추가되었는지 여부에 따라 아이콘을 다른 색상으로 표시해야합니다. 아이콘은 asp:Linkbutton으로로드되며 녹색으로 표시된 아이콘의 CSS 클래스와 회색 아이콘이있는 동일한 아이콘의 다른 CSS 클래스가 있습니다.

나는 그것을 클릭하여 아이콘의 CssClass을 변경할 수 있습니다하지만 난 Page 또는 ListView를로드하는 동안 아이콘의 CssClass을 변경하는 방법을 모르겠어요. 어떤 아이디어?

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 참조),이 바인딩 된대로 각 항목에 대해 컨트롤의 속성을 변경할 수있는 것 :

다음은 DataSet 내 코드 숨김입니다. 나는이 접근법을 전에 사용 해왔다.

데이터 바인딩 구문 (< % # %>)을 CssClass 특성에서 직접 사용해 볼 수도 있습니다. 그러나 CssClass 특성이 다른 특성과는 달리 작동하는지 확실하지 않습니다. 이미 div 내부에서 작업하고 있지만, 예를 들어 http://support.microsoft.com/kb/307860을 보면 속성 내부에 예제가 있습니다.

+0

대단히 감사합니다. ListView.ItemDataBound를 사용하는 솔루션은 내가 찾고있는 솔루션입니다. – user1814545

관련 문제