2009-07-28 3 views
3

을 호출하는 EditItemTemplateListView이 있습니다.CheckBoxList가 포함 된 ListView - 선택 항목이 체크 표시되지 않음

내 내 ListView 내에서 나는 LINQ을 사용하여 바운드 된 CheckBoxList입니다.

onItemEditing 방법에서 섹터를 사용자와 연결하는 룩업 테이블에 특정 CheckBoxes이 있는지 확인하려고합니다.

그러나 EditItemTemplate을로드 할 때 CheckBoxes 중 하나도 선택하지 않았지만 onItemEditing 메서드에서 선택한 것으로 설정했습니다.

protected void onItemEditing(object sender, ListViewEditEventArgs e) 
{ 
    ListView1.EditIndex = e.NewEditIndex; 
    ListView1.DataBind(); 

    int regId = Convert.ToInt32(((Label)ListView1.Items[e.NewEditIndex].FindControl("LblRegId")).Text); 
    CheckBoxList cbl = (CheckBoxList) ListView1.Items[e.NewEditIndex].FindControl("chkLstSectors"); 

//test to see if forcing first check box to be selected works - doesn't work 
    cbl.Items[0].Selected = true; 

    SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings["DaresburyConnectionString"].ToString()); 
    SqlCommand objCmd = new SqlCommand("select * from register_sectors where register_id= " + regId, objConn); 
    objConn.Open(); 

    SqlDataReader objReader = objCmd.ExecuteReader(); 

    if (objReader != null) 
    { 
     while (objReader.Read()) 
     { 
      ListItem currentCheckBox = cbl.Items.FindByValue(objReader["sector_id"].ToString()); 
      if (currentCheckBox != null) 
      { 
       currentCheckBox.Selected = true; 
      } 
     } 
    } 
} 

모든 아이디어를 어떻게이 문제를 해결 얻을 :

여기에 방법인가?

+0

어디에서 컨트롤을 만들었습니까? 로드시, init? –

답변

1

문제는 listView가 checkboxlist가 바인딩 된 후에 다시 바인딩된다는 것이 었습니다.

바인딩을 제거하고 작동합니다! 내가 너무 늦게 내 대답에 아니에요 희망

0

)

나는 다른 컨트롤과 같은 데이터 바인딩해야 ListView에있는 CheckBoxList 있습니다. 값이 24 인

public enum SiteType 
{ 
    Owner = 1, 
    Reseller = 2, 
    SubReseller = 4, 
    Distributor = 8 
    Manufacturer = 16, 
    Consumer = 32 
} 

경우이 유통 및 제조 (16 + 8) 의미 : 데이터베이스 내의 값이 열거로부터 계산 된 값이다.

나는 값을 데이터 바인딩 내 ListView에있는 EditItem에에 HiddenField 추가 :

<EditItemTemplate> 
    <tr> 
     <td> 
      <asp:CheckBoxList ID="cblSiteTypes" runat="server" RepeatLayout="Flow" 
       DataSourceID="ObjectDataSource4" DataTextField="Key" DataValueField="Value" /> 
      <asp:HiddenField ID="hfSiteTypes" runat="server" Value='<%# Bind("SiteType") %>' OnDataBinding="hfSiteTypesBnd" /> 
     </td> 
    </tr> 
    <!-- other data... --> 
</EditItemTemplate> 

CheckBoxList는 열거의 데이터와 사전 객체를 반환 다른 데이터 소스를 통해 채워진다. 코드 뒤에 나는 선택을 위해 HiddenField의 OnDataBinding 메서드를 사용한다.

Et voilà!