簡體   English   中英

在綁定的Datagridview中添加和填充DataGridViewComboBoxcolumn

[英]Adding and Populating DataGridViewComboBoxcolumn to Bound Datagridview

我試圖允許DataGridView允許用戶編輯字段(為簡單起見,假設它只是Item,每個Item都可以有一個Condition,允許值取自第二個表[Conditions]

例如

數據結構(簡體)

項目表

  • ID(主鍵-不顯示)
  • 編號
  • 數量
  • ConditionAbbrev(例如“ New”,“ Used”,“ Recert”)-用作下表中“條件”表中某個項目的鍵

條件表

  • ConditionAbbrev(例如“ New”,“ Used”,“ Recert”等。
  • ConditionDescription(條件的詳細描述)

所需的網格外觀:

我的網格應如下所示:

Item #   Qty   Condition
123456   10    [ New  v]   <-- A drop-down
234567   55    [ Used v]   
345678   99    [ New  v]   
etc.

策略:

我正在嘗試通過以下方式進行設置:

  1. 將網格綁定到第一個Items表(獲取包含Items表每一行實際值的前三列)

  2. 創建一個新的DataGridViewComboBoxColumn(“ CondCombo”)並將“條件”表中的所有允許項綁定到該表,

  3. 遍歷網格並將每行的CondCombo的值設置為Conditions行的值

  4. 隱藏條件(文本)列。

問題:

我可以添加並加載帶有Conditions值的列,但是我完全無法設置所選的值以匹配Items表中的Condition。 此外,我在選項卡中單擊或單擊到另一個單元格時,我在組合中所做的所有選擇都將被覆蓋。

這是到目前為止我得到的代碼:非常感謝任何幫助!

Sub SetupGrid(byref myGrid as DataGridView, 
              myConn as sqlite.sqliteConnection)

    Dim myAdapter As System.Data.SQLite.SQLiteDataAdapter

    myGrid.VirtualMode = true
    myAdapter = new system.data.sqlite.sqliteadapter(_
        "Select ID, ItemNum, Qty, Condition FROM Items", myConn)
    myAdapter.SelectCommand.CommandType = CommandType.Text

    ' Fill the main grid with the item data
    dim ds as new DataSet
    myAdapter.Fill(ds)
    myGrid.DataSource = ds.Tables(0)

    ' Now create and load the ComboBox column
    dim cboColumn as new DataGridViewComboBoxColumn
    With cboColumn
        .DataPropertyName = "ConditionAbbrev"
        .name = "CondCombo"
        .HeaderText = "Cond"

        ' Bind the ComboColumn
        Dim conditionsAdapter As System.Data.SQLite.SQLiteDataAdapter
        Dim condTable As DataTable
        using cmd as new Sqlite.sqliteCommand(_
            "SELECT ConditionAbbrev FROM Conditions", myconn)
            conditionsAdapter.selectCommand = cmd
            conditionsApapter.fill(condTable)
         end using

         .DataSource = condTable
         .DataPropertyName = "ConditionAbbrev"
         .ValueMember = "ConditionAbbrev"
         .DisplayMember = .ValueMember
      end with

      ' Set the selected combo member to be the same as the Condition (text) field value:

      for each curRow as dataGridViewrow in myGrid.Rows()
          curRow.cells("CondCombo").value = _
              curRow.Cells("Condition").value
      next

      ' Hide the Condition (text) field)
      myGrid.Columns("Condition").visible = false

      ' Hide the ID field
      myGrid.Columns("ID").visible = false
end sub

您設置的DataPropertyName錯誤。 您將一個列表綁定到網格,將一個列表綁定到列。 DisplayMemberValueMember是列名/綁定到該列的項目的屬性。 DataPropertyName是綁定到網格的項目的列/屬性的名稱。 就您而言,在我看來DataPropertyName應該設置為“ Condition”。

暫無
暫無

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

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