从未绑定列中的 DataGridViewComboBoxCell 获取选定索引和选定项

Posted

技术标签:

【中文标题】从未绑定列中的 DataGridViewComboBoxCell 获取选定索引和选定项【英文标题】:Get Selected index and Selected item from DataGridViewComboBoxCell in unbound column 【发布时间】:2015-05-17 02:42:10 【问题描述】:

我有一个大问题让我很困惑,我有一个 DataGridView 没有使用具有 DataGridViewComboBoxColumn(未绑定列)的绑定,我想在 ComBoBoxCell 中获取选定的索引或选定的项目(我的项目是自定义项目)。

我尝试投射或关注此网站 (http://satishjdotnet.blogspot.com/2009/05/getting-selected-value-of-combo-box-in.html) 但我只收到错误:

“值不是无效的”

。那么我该如何解决呢? 请帮我。非常感谢。 这是我在组合框中的自定义项目:

public class CustomItem 
    public string Text  get; set; 
    public object Value  get; set; 
    public override string ToString() 
        return Text;
    
    public CustomItem(string text, object value) 
        this.Text = text;
        this.Value = value;
    

以及如何将其添加到 DataGridViewComboBoxColumn:

List<CustomItem> teamItem = new List<CustomItem>();
teamItem.Add(new CustomItem(this._homeTeam["Name"].ToString(), Convert.ToInt32(this._homeTeam["Id"])));
teamItem.Add(new CustomItem(this._awayTeam["Name"].ToString(), Convert.ToInt32(this._awayTeam["Id"])));
foreach (CustomItem i in teamItem) 
    ((DataGridViewComboBoxColumn)this.dataGridViewGoalInformation.Columns["Team"]).Items.Add(i);

【问题讨论】:

DataGridViewComboBoxCell c = new DataGridViewComboBoxCell(); c = DataGridView1.Rows(0).Cells("MyColumnName"); c.Items.Add("Item1") @CarlProthman 正如我所说,我想在我的组合框单元格中获取选定的索引或选定的项目。我也在代码中展示了我的 CustomItem。你对我有什么想法吗? 抱歉,误读了您的问题。看看这个答案...***.com/questions/4732263/… 但是我必须在 datagridview 中捕获什么事件? 您可以在点击按钮时访问它(例如 SaveButton)。然后访问控件的选定值。 【参考方案1】:

给定 CustomItem 类,其 Value 为 int

 public class CustomItem
 
    public string Text  get; set; 
    public int Value  get; set; 
    public override string ToString()
    
        return Text;
    

    public CustomItem(string text, int value)
    
        this.Text = text;
        this.Value = value;
    

要获取值,请确保连接事件:EditingControlShowing

dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;

然后在组合框发生变化时从组合框中获取值:1)获取组合框控件,2)然后获取它的选定值:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

    if (dataGridView1.CurrentCell.ColumnIndex == 0 && e.Control is ComboBox)
    
        ComboBox comboBox = e.Control as ComboBox;
        comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
    


private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)

    DataGridViewComboBoxEditingControl dataGridViewComboBoxEditingControl = sender as DataGridViewComboBoxEditingControl;
    object value = dataGridViewComboBoxEditingControl.SelectedValue;
    if (value != null)
    
        int intValue = (int)dataGridViewComboBoxEditingControl.SelectedValue;

        //...
    

【讨论】:

我无法使用dataGridViewComboBoxEditingControl.SelectedValue 获取选定的值,但我能够使用dataGridViewComboBoxEditingControl.Items[dataGridViewComboBoxEditingControl.SelectedIndex] 获取选定的值。

以上是关于从未绑定列中的 DataGridViewComboBoxCell 获取选定索引和选定项的主要内容,如果未能解决你的问题,请参考以下文章

Springboot jpa:实体无法绑定不在表列中的自定义查询中的数据

WPF DataGrid在同一列中的不同控件 - 不正确的绑定

Swift UI 在集合中绑定 TextField

ionic 2 angular 2 在两列中分布绑定记录

如何在datagridview组合框列中绑定数据

根据asp GridView列中的值显示图像