none
ComboBox的小疑問 RRS feed

  • 問題

  • http://ppt.cc/--QK

     

    請問一下 我的延誤類別(ComboBox)可以讀取到資料庫的資料

     

    但是....

     

    平常的時候 設為false 讓使用者不能拉

     

    當按下新增修改刪除鍵之後 才可以拉

     

    它會將資料給整個列出來

     

    但是是把整個資料行給顯示出來 包括重複的值

     

    該怎麼做才能改成只列出不重複的值呢??

     

    而且我希望使用者按新增和修改鍵時

    只能輸入01到05的值

     

     

    這兩個方法該怎麼做呢>.<

    • 已編輯 Qoo 2011年11月30日 上午 04:08
    2011年11月30日 上午 03:46

解答

  • 那您設定combobox的item value值應該是不同,只是item tetx是相同的嗎?

    不然就是在取資料時,加個distinct。


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 06:44

所有回覆

  • 請問comboBox的Items是程式新增進去的,還是Bind 資料的呢?

    如果是程式新增的話,就在每次新增前都Clear Items。

    如果是Bind資料的話,那就要Check一下來源資料為何會重覆了哦! 


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 04:37
  • Private Sub BindEditData(ByVal paramDataGridView As DataGridView, Optional ByVal paramRowIndex As Integer = -1)
            Dim DataGridViewRowTemp As DataGridViewRow = Nothing   '客戶資列及欄位名稱列
            '客戶資料
            Dim StringFieldName As String
            Dim StringFieldValue As String = " "
            Try
                If paramRowIndex >= 0 Then
                    DataGridViewRowTemp = paramDataGridView.Rows(paramRowIndex)
                Else
                    If paramDataGridView.CurrentRow IsNot Nothing Then
                        DataGridViewRowTemp = paramDataGridView.CurrentRow
                    End If
                End If

                For Each ControlTemp As Control In Me.PanelEdit.Controls
                    If ControlTemp.Tag IsNot Nothing Then
                        StringFieldName = ControlTemp.Tag.ToString
                        StringFieldValue = " "
                        If DataGridViewRowTemp IsNot Nothing Then
                            If paramDataGridView.Columns.Contains(StringFieldName) Then
                                StringFieldValue = DataGridViewRowTemp.Cells(StringFieldName).Value.ToString
                            End If
                        End If
                    End If
                    '欄位值               
                    If ControlTemp.GetType.FullName = GetType(TextBox).FullName Then
                        ControlTemp.Text = StringFieldValue
                    End If

                    If ControlTemp.GetType.FullName = GetType(ComboBox).FullName Then
                        ControlTemp.Text = StringFieldValue
                    End If

     

    在後面程式碼這邊 最後會依照tag把每個textbox的欄位給加上資料

    所以我就自己加上   

    If ControlTemp.GetType.FullName = GetType(ComboBox).FullName Then
    ControlTemp.Text = StringFieldValue
    End If

    這段程式碼~結果是把全部的資料給叫出來

    我是不是要加點甚麼 去把重複的值給篩選出來呢??

    2011年11月30日 上午 05:31
  • 您可以debug一下,在進那個function時,ComboBox的items裡的資料是不是已經有重覆的資料呢?

    請問您combobox的items是何時新增的呢? check一下哦!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 05:46
  • 疑!我剛確認了一下 combobox的屬性那邊

    我有設定datasource了...@@"

    所以才會把所有的資料行給列出來...

     

    並不是因為這行程式的關係

    If ControlTemp.GetType.FullName = GetType(ComboBox).FullName Then
    ControlTemp.Text = StringFieldValue
    End If

     

    這樣的話...

    是要加ComboBox1.Items.Clear()

    就好了嗎??

    因為加了沒有篩選掉

    不曉的是語法錯 還是放錯位置了

    2011年11月30日 上午 06:28
  • 那您的datasource就有重覆的資料了吧!

    請check一下哦!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 06:34
  • 我那張資料表的欄位 原本就可以放重複的資料

     

    那我想要當資料連到combobox的資料 使用者按下下式選單

    資料只會出現沒有重複的值出來

     

    所以想說...是不是可以用ComboBox1.Items.Clear()

    把重複的值過濾後 再加到combobox裡??

    2011年11月30日 上午 06:38
  • 那您設定combobox的item value值應該是不同,只是item tetx是相同的嗎?

    不然就是在取資料時,加個distinct。


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 06:44
  • 謝謝~~問題已經解決了

    我直接在item選項 手動輸入數值

    然後在DropDownStyle裡面設定DropDown

    就解決了我的問題@@"

    2011年11月30日 上午 07:10
  • 嗯! sql是如此,但應該是給DataSource屬性吧!

    類似以下的Code,請參考一下combobox的DataBind

    comboBox1.DataSource = "@@yourresult@@";
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "Value";

     

    您原本應該就有Bind了吧!

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 07:11
  • 嗯~~已經有bind了

     

    我剛剛在試的時候 發現還是有點小bug

    http://ppt.cc/;LeI

    http://ppt.cc/iKt9

     

    因為欄位本身有null值 我也不知道該怎麼處理null值

    所以就在第一張圖打四個空白鍵

    再用第二張圖實驗一下 發現沒到法找null值...@@"

     

    請問在第一張圖 有辦法輸入甚麼

    讓combobox可以找到null嗎??

    2011年11月30日 上午 07:29
  •  

    你一定要KEY  01  "多那個0嗎"

    你設定 

    combobox1.MAXLENGTH=1     '限制輸入的字元長度   +下面的程式就夠你用了

    Private Sub ComboBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
      If ((e.KeyCode >= 48) And (e.KeyCode <= 53))  Then

       Else 
           e.SuppressKeyPress = True
     End If    End Sub

    2011年11月30日 上午 08:24
  • 我那個資料表欄位是這樣用0開頭表示的 所以我覺得一定要加0

    另外我那個是下拉式的選單 沒打算讓使用者輸入數字耶@@"

    2011年11月30日 上午 08:47
  • 您好,我有用手動加入項目,給您參考一下,謝謝!  value可給DBNull.Value!
    不過,您的資料不是從DB來的嗎?

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ComboBox1.Items.Clear()
        Dim itemValue = New Dictionary(Of Object, String)()
        itemValue.Add(DBNull.Value, String.Empty)
        itemValue.Add("01", "01")
        itemValue.Add("02", "02")
        itemValue.Add("03", "03")

        ComboBox1.DataSource = itemValue.ToList
        ComboBox1.DisplayMember = "Value"
        ComboBox1.ValueMember = "Key"
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        ComboBox1.SelectedValue = DBNull.Value
    End Sub
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 09:08
  • 嗯~是從DB上來的 為什麼會這樣問呢??

    我剛自己再去iterms試 本來打四個半型空白鍵的

    我改成一個全行空白鍵 就可以解決找到null的問題了0.0

    • 已編輯 Qoo 2011年11月30日 上午 09:49
    2011年11月30日 上午 09:29
  • 您知道DB取那些資料到combobox之中嗎? 請了解一下哦!

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 09:53
  • 謝謝~~

    你真的好熱心^^

    2011年11月30日 上午 10:14
  • 那您找到問題的所在了吧~~
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年11月30日 上午 11:16