none
[vb2008] ComboBox 排序問題 RRS feed

  • 問題

  • 下面是我 ComboBOX 的程式碼
    主要是 用來 相對呼應

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

        ComboBox1.DataSource = MyData_pi_fa_ko.Tables("table2")
        ComboBox1.DisplayMember = "no"

        ComboBox2.Text = MyData_pi_fa_ko.Tables("table2").Rows(ComboBox1.SelectedIndex).Item("name").ToString

      End Sub


      Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged

        ComboBox2.DataSource = MyData_pi_fa_ko.Tables("table2")
        ComboBox2.DisplayMember = "name"

        ComboBox1.Text = MyData_pi_fa_ko.Tables("table2").Rows(ComboBox2.SelectedIndex).Item("no").ToString

    =======
    如果在Combobox1 那邊不論如何選擇 都沒問題(在屬性頁內 已經設定 Sort = True)
    但是 如果在 ComboBox2 的 範圍內 卻出了 如下面出現的問題 (同樣的 在屬性頁內 已經設定 Sort = True)



    類型 'System.StackOverflowException' 的未處理例外狀況發生於 System.Windows.Forms.dll


    在 ComboBox2 內的顯示都是中文字 但是卻有一行 是完全空白的
    是因為 「空白行」 還是 中文字 導致的問題?




    =====
    我大概知道 問題出在哪但是 又為何會這樣?
    問題點在 下面這段 Form_Load 區段內

    ComboBox1.DataSource = MyData_pi_fa_ko.Tables("table2"
    )
    ComboBox1.DisplayMember = " no" ComboBox2.Text = MyData_pi_fa_ko.Tables("table2" ).Rows(ComboBox1.SelectedIndex).Item(" name" ).ToString

    ' ComboBox2.DataSource = MyData_pi_fa_ko.Tables("table2") 'ComboBox2.DisplayMember = " name" 'ComboBox1.Text = MyData_pi_fa_ko.Tables("table2").Rows(ComboBox2.SelectedIndex).Item(" no").ToString
    註解掉 的就是問題點
    如果加上去 是可以兩個 combo 顯示
    但是如果一選擇 其中任何一個 Combo 則 他會很像一直在跑迴圈 跑到最後面就會出現上面的那種錯誤
    • 已編輯 白楓林 2009年6月26日 下午 05:26
    2009年6月26日 下午 04:56

解答

所有回覆

  • 按下除錯,把標示為黃色的那行貼出來,也把預定傳入的變數用 Shift+F9 觀看一下。

    你打算傳入 ComboBox2 有幾筆資料?
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年6月26日 下午 05:05
  • 我後面有編輯過了

    問題好像出在 Form_Load區段 (就是程式一執行 馬上會自動讀取的Load)

    我的 ComboBox2 大約有 100 筆資料
    • 已編輯 白楓林 2009年6月26日 下午 05:28
    2009年6月26日 下午 05:24
  • ComboBox2.Text = MyData_pi_fa_ko.Tables("table2"
    ).Rows(ComboBox1.SelectedIndex).Item("
    name"
    ).ToString
    
    'ComboBox1.Text = MyData_pi_fa_ko.Tables("table2").Rows(ComboBox2.SelectedIndex).Item("
    no").ToString


    這兩行應該有問題吧?Form_Load時ComboBox.SelectedIndex是-1?
    2009年6月27日 上午 12:08
  • 如果是 單純 只有一個 Combo 不論是 1 還是  2 都可以正常顯示
    但是 兩個一起放上去就有問題了
    2009年6月27日 上午 01:31
  • 下載參考此程式

    http://cid-101d8ba47227b414.skydrive.live.com/self.aspx/.Public/MSDN20090627.rar

    內有兩個程式,功能都是 combobox1 與 combobox2 的連動


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    2009年6月27日 上午 02:30
    版主
  • 看Code不瞭解這用途是什麼?可以稍微說明一下嗎?也許可以用別的方法解決.
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年6月27日 上午 03:28
    版主
  • 看了 小歐 的範例 如下
    ===
    ComboBox1.DataSource = MyData_pi_fa_ko.Tables("table2")
            ComboBox1.DisplayMember = "no"

            ComboBox2.DataSource = MyData_pi_fa_ko.Tables("table2")
            ComboBox2.DisplayMember = "Name"

            If ComboBox1.SelectedIndex >= 0 Then
                ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
            End If
    ===

    我改成如下 代碼
    才知道 罪魁 居然在
    ComboBox2.text 那邊的指令
    為何會導致這樣?
    變成不需要 作一個 IF 去判斷 , 我直接取消掉 ComboBox2.text 整行的指令就可以
    只是我不懂得是 ,為何單一的時候 沒有兩個一起下指令就可以很正常的顯示
    當兩個一起下指令之後就會 整個一直跑?


    ComboBox1.DataSource = MyData_pi_fa_ko.Tables("table2")
        ComboBox1.DisplayMember = "no"

        '  ComboBox2.Text = MyData_pi_fa_ko.Tables("table2").Rows(ComboBox1.SelectedIndex).Item("name").ToString

    回 Bill
    我只是要作一個 連動指令
    當選擇 combo 1 就可以 連動 combo2
    就是 當 combo1  Index =1 則 combo2 也是要 Index =1
    相反亦是.
    2009年6月27日 上午 08:17
  • 有問題的這行,應該是要放在comboBox的SelectedIndexChanged事件裡吧...
    2009年6月27日 上午 08:52
  • 看起來兩個Combobox的資料來源是一樣的Datatable,只是內容顯示是不同攔位吧。那用BindingSource當資料中介做同步最方便了 。請參閱 MSDN文件庫 [BindingSource 類別]
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年6月27日 上午 11:10
    版主
  • 1. 請問您 run 我的範例有問題嗎 ?
    2. 您有特殊的理由,堅持一定要用您提出的作法嗎 ?


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    2009年6月27日 下午 02:43
    版主
  • 小第有幾個想法說明一下:

    1.樓主2個ComBoBox都是聯結自資料庫,而依照MSND錯誤的說明 StackOverflowException
      所指的是 擲回於執行堆疊因為包含過多巢狀方法呼叫而溢位時
    MSND說明  http://msdn.microsoft.com/zh-tw/library/system.stackoverflowexception(VS.80).aspx

    2.而在設定Combobox.text 時因已連結至資料庫當設定其 Text 屬性時,控制項是否會自動去重新搜尋資料庫 Table 裡的欄位值????
    故會去呼叫其 ComboBox.SelectedIndexChanged 事件

    3又在 ComboBox.SelectedIndexChanged 事件裡去對另一個 Combobox 設定其 Text 屬性,以 2 的觀點成立那在
      ComboBox.SelectedIndexChanged 事件裡是否就型成互相呼叫另一個Combobox 的 SelectedIndexChanged 事件了?????

    故會形成 此錯誤訊息 (於執行堆疊因為包含過多巢狀方法呼叫而溢位)

    有錯誤的地方請各位前輩指正,解決的方法....各位前輩已經說明了....小弟在此純討論


    2009年6月27日 下午 06:03
  • 1. 請問您 run 我的範例有問題嗎 ?
    2. 您有特殊的理由,堅持一定要用您提出的作法嗎 ?


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    回答 您 1. run 您的範例 沒問題

    2. 基於在 某論壇的某人曾經說過「程式不是用看的」 那我 RUN 了您的範例,
    請問有哪條版規或者條文明確的指出 熱心人士給了範例,就要用他的範例不得更改或提出問題?


    3. 程式設計者,很多人都是初學者,也很多人看不懂MSDN資料庫,
    當然有人很熱心的教初學者怎麼去看懂 MSDN , 如果在站在初學者的環境下,
    一個龐大的MSDN 資料庫 跟一個天下一大抄的書本
    與一個像您給的一個範例程式(對症下藥) 那個比較容易直接進入設計環境?
    • 已編輯 白楓林 2009年6月28日 上午 02:06 修改排版
    2009年6月28日 上午 02:04
  • 小第有幾個想法說明一下:

    1.樓主2個ComBoBox都是聯結自資料庫,而依照MSND錯誤的說明 StackOverflowException
      所指的是 擲回於執行堆疊因為包含過多巢狀方法呼叫而溢位時
    MSND說明  http://msdn.microsoft.com/zh-tw/library/system.stackoverflowexception(VS.80).aspx

    2.而在設定Combobox.text 時因已連結至資料庫當設定其 Text 屬性時,控制項是否會自動去重新搜尋資料庫 Table 裡的欄位值????
    故會去呼叫其 ComboBox.SelectedIndexChanged 事件

    3又在 ComboBox.SelectedIndexChanged 事件裡去對另一個 Combobox 設定其 Text 屬性,以 2 的觀點成立那在
      ComboBox.SelectedIndexChanged 事件裡是否就型成互相呼叫另一個Combobox 的 SelectedIndexChanged 事件了?????

    故會形成 此錯誤訊息 (於執行堆疊因為包含過多巢狀方法呼叫而溢位)

    有錯誤的地方請各位前輩指正,解決的方法....各位前輩已經說明了....小弟在此純討論
    回答 2.
    如果沒在 Load 先設定好 ComboBox
    在 ComboBox.SelectedIndexChanged 裡面
    才設定,
    那ComboBOX 則沒有資料
    我也測試過如果在 ComboBox.SelectedIndexChanged
    重新再度定義 (Load定義過)
    則也會導致 ComboBOX 內沒有資料

    至於
    3.
    看了您的
    Combobox 設定其 Text 屬性

    才讓我突然覺得,我自己好像都把 Text 屬姓 一直 固定在 「文字顯示」
    沒想過有的時候適得其反
    2009年6月28日 上午 02:12
  • 1. 請思考 Combobox.Text 與 Combobox.SelectedIndex、Combobox.SelectedText、Combobox.SelectedValue 的差異

    2. 我給您的其中一個範例,使用 Combobox.SelectedIndex,為何您堅持使用 Combobox.Text ?

    3. 我給您的其中一個範例,將 Combobox1 與 Combobox2 bind 同一來源資料表,即可產生連動關係


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    2009年6月28日 上午 02:24
    版主
  • 回您
    2
    我沒有堅持要用 ComboBox.text 只是看了您的範例 用上 SelectIndex 我就只是
    猜測是否我 ComboBox.text 出錯,只是把 ComboBox.text 拔掉而已就一切正常

    3
    要設Bind 也可以在屬性內設定這點我在別的範例曾經看過
    只是他沒設定在 程式碼內
    那時候我看他的範例只是動一個按鍵就可以文字連動
    看了程式碼卻沒有這段的程式碼
    到了屬性頁才知道他是設定在 屬性頁內
    2009年6月28日 上午 02:44