簡體   English   中英

列表框未顯示任何結果

[英]listbox not showing any results

我希望Visual Studio中的列表框列出課程表中的課程(來自數據庫),應用程序運行良好,但listBox仍然為空,這是我正在使用的代碼:

  protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string sqlcon = "Data Source = localhost; Persist Security Info = True; User ID = localhost; Password = ****; Unicode = True";

        OracleConnection con = new OracleConnection(sqlcon);
        con.Open();
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = con;
        cmd.CommandText = "select coursename from course";
        cmd.CommandType = CommandType.Text;
        OracleDataReader dr = cmd.ExecuteReader();
        dr.Read();

        while(dr.Read())
        {
            ListBox1.Items.Add(dr.GetString(1));
        }
    }

您的代碼中至少有三個錯誤和一些邏輯問題。

錯誤優先:

  • 您無需對讀取的記錄進行任何操作即可調用read。
  • 當您到達循環代碼時,您已經加載了第一條記錄,因此“讀入內部”僅嘗試加載第二條記錄。 但是,如果只有一條記錄,則循環永遠不會運行,因此列表中沒有項目
  • 您調用GetString(1),但只從表中檢索課程名稱,這將為索引超出范圍提供例外。 數組從索引零開始,因此要獲取課程名,您需要GetString(0)

     // Not needed, let the loop run // dr.Read(); while(dr.Read()) { // The first column is at index zero ListBox1.Items.Add(dr.GetString(0)); } 

最后是邏輯問題。 似乎您使用SelectedIndexChanged事件來填充觸發SelectedIndexChanged的同一列表的項目。 這似乎是不合邏輯的,因為您已經在該列表中有項目並選擇一個項目觸發了該事件。 這段代碼應該在其他地方運行(Load事件?)您要在這里做什么? 無論如何,如果您確實想要保留此代碼,則至少應在從數據庫加載項目之前清除Items集合,否則,在每個SelectedIndexChanged處添加與已加載的項目相同的另一組項目。

  // Before filling the items clear the previous ones
  listBox1.Items.Clear();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM