2009-06-07 87 views
0

假设我设计了一个DataGridView以具有一个名为'dataGridViewComboBocColumn'的comboBoxColumn。从--- DataGridViewComboBoxColumn中检索项目

我可以使用下面的代码填充组合框:

private void DataGridViewForm_Load(object sender, EventArgs e) 
    { 
     BookCollection books = Book.GetAllBooks(); 

     foreach (Book b in books) 
     {     
      dataGridViewComboBocColumn.Items.Add(b); 
     } 

     dataGridViewComboBocColumn.DisplayMember = "BookName"; 
     dataGridViewComboBocColumn.ValueMember = "BookISBN"; 
    } 

但我怎么能检索所选项目的对象。这样我就可以投射并将该项目转换为Book对象。

回答

0

好的,这里有一些你可以做的事情:首先,钩入DataGridView的EditingControlShowing事件,并且在事件处理程序中,EventArgs的属性e.Control可以转换为标准的ComboBox,因此,保存一个被键入的字典int是rowindex。然后,在事件处理程序中,将组合框添加到dic中tionary:

private Dictionary<int, ComboBox> comboBoxes; 
    public Form1() 
    { 
     InitializeComponent(); 
     this.comboBoxes = new Dictionary<int, ComboBox>(); 
     this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing); 
    } 

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     var cb = e.Control as ComboBox; 
     if (!(this.comboBoxes.ContainsKey(this.dataGridView1.CurrentRow.Index))) 
     { 
      this.comboBoxes.Add(this.dataGridView1.CurrentRow.Index, cb); 
     } 
    } 

然后,当你需要获取对象出组合框的,通过你们的字典迭代,并得到正确的组合框,刚拿到的SelectedItem /的SelectedValue。

0

你不能:(

这是DataGridViewComboBoxColumn的限制。

我工作围绕这通过创建一个TypeDescriptor,增加了所谓的“本”一个附加项目,即返回实例。

+0

但是,我怎样才能使用'这'检索项目? – 2009-06-07 19:52:45