2011-05-21 54 views
2

假設我有一個SQL表題爲「設施」,看起來像這樣:第一項沒有顯示出來

|| FacilityID ||   Name  || 
     0    Lecture Theatre 
     1    Seminar Room 
     2    Computer Lab 
     3    Electronics Lab 
    ...    ... 

,並繼續爲這樣的30多名不同的房間設施。我想這些數據綁定在ASP.NET中的CheckBoxList(C#),它看起來像這樣:

<asp:CheckBoxList ID="FacilityCheckList" AutoPostBack="true" runat="server"> 
    </asp:CheckBoxList> 

我使用C#實現這一目標的代碼如下所示:

String strSQL; 
strSQL = "SELECT * FROM Facility"; 
SqlCommand cmd3 = new SqlCommand(strSQL, DBConnection); 
DBConnection.Open(); 
SqlDataReader FacilityData; 
FacilityData = cmd3.ExecuteReader(); 
FacilityData.Read(); 
FacilityCheckList.DataSource = FacilityData; 
FacilityCheckList.DataValueField = "Name"; 
FacilityCheckList.DataBind(); 
DBConnection.Close(); 

現在這個工作非常好,除了一件事情:它不顯示列表中第一個項目的複選框,演講廳。列表中的所有其他設施都顯示出一個CheckBox,但沒有演講廳 - 我不知道爲什麼!

當我自己運行查詢時,它在SQL端沒有問題,它返回完整列表。我不認爲它是特定於CheckBoxList的,因爲當我嘗試綁定到DropDownList時,我遇到了同樣的問題。我非常難以理解爲什麼它這樣做,所以任何見解都將非常感謝!

乾杯

回答

1

刪除行:

FacilityData.Read(); 

這引起讀者向前移動一個缺口讓你失去的第一個項目

+0

...非常感謝你!這已經完全解決了我的問題......非常感謝,儘管我在編程方面絕不是'專家',但我一直在做足夠長的時間,直到本能地知道它會由一些愚蠢的一對一引起的,線條這樣的事情:p – Deacon 2011-05-21 00:38:42

0

不要SqlReader打電話Read()。調用ExecuteReader()之後,只需將其作爲CheckBoxList的數據源即可。 當你將它設置爲數據源時,它通過調用Read()開始,因此在你的情況下,第一條記錄被跳過。