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

时间:2015-05-17 02:42:10

标签: c# .net winforms datagridview

我有一个很大的问题,让我如此迷惑,我有一个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);
}

1 个答案:

答案 0 :(得分:5)

给定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;

        //...
    }
}