【问题标题】:DataGridViewComboBoxColumn Selected ValueDataGridViewComboBoxColumn 选定值
【发布时间】:2013-10-18 18:26:10
【问题描述】:

我在 MS Access 中创建了一个数据库,并将其移植到 VB.NET。

我在代码中完成了大部分工作。

我有一个连续的子表单,其中包含一个组合框,其中填充了来自表 (tblSubject) 的值。它有一个键列和一个值列。

tblSubject 主题 ID (PK) |主题

它使用链接主/子字段链接到父表单。

这个用来填写tblChoice的SubjectID,

tblChoice 选择ID (PK) |学生证 (FK) |主题 ID (FK) |备注

我决定使用 DataGridView 来显示这些数据。

根据我的研究,我已将 DataGridViewComboBoxColumn 添加到 DataGridView。

我希望能够将组合框设置为 tblChoice 中的值,但很难弄清楚如何设置。 我错过了什么明显的东西吗?


我找到了一种将值设置为特定行的方法,但我需要将其作为表中的值,因为每个值可能不同。

For Each dgvRow As DataGridViewRow In dgvChoices.Rows
    dgvRow.Cells(SubjectComboBoxColumn.Name).Value = 3 'dgvChoices.Rows.Item
Next

http://vbcity.com/forums/t/165967.aspx


我需要查看 DataGridViewComboBoxCell 吗?

'Dim dgvcbc As DataGridViewComboBoxCell = DirectCast(dgvChoices.Rows(0).Cells(0), DataGridViewComboBoxCell)


代码
Dim dbProvider As String
Dim dbSource As String
Dim conStudent As New OleDb.OleDbConnection

'Choices
Dim dsChoices As New DataSet
Dim daChoices As OleDb.OleDbDataAdapter
Dim dvChoices As New DataView
Dim sqlChoices As String

'Subjects
Dim dsSubjects As New DataSet
Dim daSubjects As OleDb.OleDbDataAdapter
Dim sqlSubjects As String

Private Sub frmNAME_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" '.mdb
    dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;" '.accdb
    dbSource = "Data Source=C:\db.accdb"
    conStudent.ConnectionString = dbProvider & dbSource
    conStudent.Open()

    sqlChoices = "SELECT * FROM tblChoice WHERE StudentID=" & txtStudentID.Text
    daChoices = New OleDb.OleDbDataAdapter(sqlChoices, conStudent)
    daChoices.Fill(dsChoices, "Choices")
    'Populate the DataGridView
    dvChoices = dsChoices.Tables("Choices").DefaultView
    'dgvNotes.DataSource = dsChoices.Tables("Choices")
    dgvChoices.DataSource = dvChoices

    'Subjects Combo
    sqlSubjects = "SELECT * FROM tblSubject"
    daSubjects = New OleDb.OleDbDataAdapter(sqlSubjects, conStudent)
    daSubjects.Fill(dsSubjects, "Subjects")

    Dim SubjectComboBoxColumn As New DataGridViewComboBoxColumn
    With SubjectComboBoxColumn
        .DataSource = dsSubjects.Tables("Subjects").DefaultView
        .DisplayMember = "Subject"
        .ValueMember = "SubjectID"
        '.DisplayIndex = 0
    End With
    dgvChoices.Columns.Add(SubjectComboBoxColumn)

    conStudent.Close()
End Sub


其他链接

我不需要默认值,但发现这很有用。

col.DefaultCellStyle.DataSourceNullValue = 1; //this is not index! It is value binded to 'ValueMember'

selecting value from DataGridViewComboBoxColumn?

【问题讨论】:

    标签: vb.net datagridview datagridcomboboxcolumn


    【解决方案1】:

    您应该将组合框 DisplayMember 和 ValueMember 设置为您想要在组合框上的字段,然后将 DataPropertyName 设置为您要在子表中链接的字段。

    你有大部分,因为你在做SELECT *,我不知道你的字段名称,但假设它链接到“tblChoice”表中的“SubjectID”,你会想要:

    .DataPropertyName = "SubjectID"
    

    【讨论】:

    • 确实与 SubjectID 相关联。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多