【问题标题】:Pass the Selected Value in DataGridView to ComboBox将 DataGridView 中的选定值传递给 ComboBox
【发布时间】:2015-05-02 03:30:26
【问题描述】:

当我单击 DataGridView 中的一个单元格时,值会在我的文本框上传递,但是当我的组合框出现问题时,它只是保持为空。我已经尝试过 SelectedItem 和 SelectedIndex 但它保持为空。我已经设法使用 SelectedText 将值放在我的组合框中,但是一旦我更新了我的数据库,我的组合框中就会出现 NullReferenceException,这是我的代码:

private void dgvStudentRecord_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex >= 0)
        {
            DataGridViewRow row = this.dgvStudentRecord.Rows[e.RowIndex];
            txtStudNum.Text = row.Cells["studentId"].Value.ToString();
            txtStudName.Text = row.Cells["studentName"].Value.ToString();
            cboSection.SelectedText = row.Cells["section"].Value.ToString();
            numPrelim.Value = Convert.ToDecimal(row.Cells["prelim"].Value);
            numMidterm.Value = Convert.ToDecimal(row.Cells["midterm"].Value);
            numFinals.Value = Convert.ToDecimal(row.Cells["finals"].Value);
        }
    }

【问题讨论】:

  • 当您在调试器或 QuickWatch 中将鼠标悬停在 row.Cells["section"].Value.ToString() 上时,值是什么......?
  • 如果你把这个cboSection.SelectedText = row.Cells["section"].Value.ToString();改成下面的cboSection.SelectedIndex = row.Cells["section"].Value;会怎么样
  • 我得到一个错误,无法将字符串隐式转换为对象。
  • 您想要什么:1) 将值作为新项目添加到 ComboBox.Items 或 2) 在组合框的项目集合中查找并选择该值?对 1) 使用 cb.Items.Add,对 2) 使用 cb.FindString 或 cb.FindStringExact。 (或者写你自己的发现!)
  • @TaW 2) 在组合框的 items 集合中查找并选择该值

标签: c# datagridview combobox


【解决方案1】:

如果以接近它的方式执行此操作,您会有些头疼,因为 ComboBox 根本无法很好地处理意外值,并且 SelectText 属性没有按照您认为的方式执行(它没有从设置该属性时的内部列表)(请参阅:https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedtext(v=vs.110).aspx

你会写得更好:

int index = cboSection.FindString(row.Cells["section"].Value.ToString());
if(index > -1)
{
   cboSection.SelectedIndex = index;
}
else
{
        object newSection = row.Cells["section"].Value.ToString();
        cboSection.Items.Add(newSection);
        cboSection.SelectedItem = newSection;
}

已编辑以显示条件选择或添加。

最后的编辑……Doh。

【讨论】:

  • 我已经尝试了你所说的并且没有任何错误,但是在我运行我的程序后,在我单击 datagridview 中的一个项目后,组合框仍然为空
  • 那么您正在测试的项目很可能不在列表中。您应该测试索引以查看它是否在列表中。如果不是,请添加并选择它。
  • 我已经使用属性中的项目(集合)在组合框中添加了项目。我有一种向 datagridview 添加值的方法,当我单击一个单元格时,它只是将值传输到一个文本框和一个组合框
  • 好的,但是 ComboBox 仍然要求您从列表中选择其中一项。当您使用 FindText 方法时,它会对其项目集合进行不区分大小写的比较,以查看是否存在匹配项。如果是,则返回其索引。例如,假设当您单击 datagridview 时,选择了索引 5 处的组合框项。如果你设置了组合框的 SelectedText 属性,那么第 5 项仍然是选中的项目,它的 SelectedText 只是显示为你传入的任何内容。有意义吗?
  • 是的,先生,我明白了。我已经在上面尝试了您编辑的代码,但在 ComboBoxItem 中出现错误。它说找不到
【解决方案2】:

试试这个,ComboBox.Text 属性

 combobox1.Text=row.Cells[cellIndex].Value.ToString();

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多