2013-11-26 111 views
0

我上週發佈了一個問題,但並沒有真正知道爲什麼必須爲第一個答案設置顯示成員或值成員。DataGridViewComboBoxColumn單元格值返回空值

看看其他論壇,我得到的是,如果我使用列表綁定到DataGridViewComboBoxColumn那麼我應該很容易地得到選定的值。

我張貼的問題是在這裏:

Setting DataGridViewComboBoxColumn.Valuemember to a list<string>

我現在有這樣的代碼:

// set values to combobox column cells in datagridview 
GridSellProducts.Rows.Add(); 
DataGridViewComboBoxColumn cmbItems = (DataGridViewComboBoxColumn)GridSellProducts.Columns["Item"]; 

cmbItems.DataSource = productNames; 

cmbItems.AutoComplete = true; 

GridSellProducts.EditingControlShowing += new 
      DataGridViewEditingControlShowingEventHandler(GridSellProducts_EditingControlShowing); 

private void LastColumnComboSelectionChanged(object sender, EventArgs e) 
{ 
     string itemValue = GridSellProducts.Rows[GridSellProducts.CurrentCell.RowIndex].Cells["Item"].FormattedValue.ToString(); 
.......code 
} 

但是字符串的值項目值以上的總是空的,即串項目值=「」 ;當我運行我的代碼。爲什麼是這樣?

補充:

這是我如何填充productNames

private void AutocompleteItems() 
     { 
      // get products 
      productsURL = "https://eko-app.com/Products/list_products/sessionId:" + sessionID + ".json"; 

      var products = Products.GetProducts(productsURL); 

      List<string> productNames = new List<string>(); 

      foreach (var p in products) 
      { 
       var x = p.Product; 

       foreach (var pn in x) 
       { 
        productNames.Add(pn.name); 
       } 
      } 

      // set values to combobox column cells in datagridview 
      GridSellProducts.Rows.Add(); 
      DataGridViewComboBoxColumn cmbItems = (DataGridViewComboBoxColumn)GridSellProducts.Columns["Item"]; 

      cmbItems.DataSource = productNames; 

      cmbItems.AutoComplete = true; 

      GridSellProducts.EditingControlShowing += new 
      DataGridViewEditingControlShowingEventHandler(GridSellProducts_EditingControlShowing); 
     }  

類產品

//some code 
public class Product 
{ 
    public string product_id { get; set; } 
    public string name { get; set; } 
    public decimal selling { get; set; } 
    public decimal buying { get; set; } 
    public string default_tax_tier { get; set; } 
    public string quantity_available { get; set; } 
} 

回答

0

我有同樣的問題。答案有點晚,但我希望它可以幫助某人。相反設置列的數據源,我單獨添加的對象之列,像這樣:

DataGridViewComboBoxColumn column = (DataGridViewComboBoxColumn)GridSellProducts.Columns["Item"]; 
foreach (string productname in productNames) 
{ 
    column.Items.Add(productname); 
} 
this.ValueType = typeof(string); 
// if you use a custom object instead of a string, set these values: 
// this.DisplayMember = "value"; 
// this.ValueMember = "hiddenValue"; 

然後你就可以在爭取將selectedItem從DataGridViewComboBoxEditingControl獲取對象(字符串或別的東西)的值事件處理員。這個項目將是添加到列項目的對象(在這種情況下是字符串)。爲我工作的代碼是:

private void LastColumnComboSelectionChanged(object sender, EventArgs e) 
{ 
    var sendingCB = sender as DataGridViewComboBoxEditingControl; 
    var currentcell = mappingDataGridView.CurrentCellAddress; 

    if (currentcell.X == 0) 
    { 
     object value = sendingCB.SelectedItem; 
     if (value != null) 
     { 
      string itemValue = (string)sendingCB.SelectedItem; 
      // 
      // or with an other object it looks like this: 
      // int intValue = ((ComboBoxItem)sendingCB.SelectedItem).hiddenValue; 
     } 
    } 
} 

我用this後,看看如何使用事件處理程序的DataGridViewComboBoxColumn。希望這會幫助別人:)。