2009-06-07 88 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