2015-07-22 5 views
0

Я хочу получить значение ячейки ComboBox в DataGridView, чтобы поместить ее в метод обновления для записи. Значения для этого ComboBox отображаются с DisplayMember и хранятся в базе данных как ID.Как получить значение comboBox из ячейки datagridview

Это в моем DataGridView в моем методе загрузки формы с ComboBox ячейки в Индексе 15

............. 
     dgv_Cust.Columns[14].Name="Web"; 
     dgv_Cust.Columns[14].DataPropertyName = "Web"; 
     DataGridViewComboBoxColumn cbcol = new DataGridViewComboBoxColumn(); 
     cbcol.Name = "AccStatus"; 

     cbcol.DataPropertyName = "cbcol"; // DataTable column name 
     cbcol.Items.Add(new ComboRecord(0, "")); 
     cbcol.Items.Add(new ComboRecord(1, "Active")); 
     cbcol.Items.Add(new ComboRecord(2, "NotActive")); 
     cbcol.Items.Add(new ComboRecord(3, "Other")); 
     cbcol.DisplayMember = "Status"; 
     cbcol.ValueMember = "IDx"; 
     cbcol.DisplayIndex = 15; 
     dgv_Cust.Columns.Add(cbcol); 

     dgv_Cust.Columns[15].Name = "AccStatus"; 
     dgv_Cust.Columns[15].DataPropertyName = "AccStatus"; 

     dgv_Cust.ColumnCount = 17; 


     dgv_Cust.Columns[16].Name="Location"; 
     dgv_Cust.Columns[16].DataPropertyName = "Location"; 

     dgv_Cust.DataSource = DBConn.getCustInfo1(); 
    } 

Я получаю значения от этого DataGridView передать его в метод Update, как это ComboBox .... .

private void button2_Click(object sender, EventArgs e) //UpdateCustomer 
{ 

     //Here I want to get valueMember(IDx) for cell[15], from the comboBox   

     string PostalCode = this.dgv_Cust.CurrentRow.Cells[2].Value.ToString(); 
     string Name = this.dgv_Cust.CurrentRow.Cells[3].Value.ToString(); 
     string BusinessName = this.dgv_Cust.CurrentRow.Cells[4].Value.ToString(); 
     string AltName = this.dgv_Cust.CurrentRow.Cells[5].Value.ToString(); 
     string Adrs1 = this.dgv_Cust.CurrentRow.Cells[6].Value.ToString(); 
     string Adrs2 = this.dgv_Cust.CurrentRow.Cells[7].Value.ToString(); 
     string City = this.dgv_Cust.CurrentRow.Cells[8].Value.ToString(); 
     string Province = this.dgv_Cust.CurrentRow.Cells[9].Value.ToString(); 
     string Phone1 = this.dgv_Cust.CurrentRow.Cells[10].Value.ToString(); 
     string Phone2 = this.dgv_Cust.CurrentRow.Cells[11].Value.ToString(); 
     string Email1 = this.dgv_Cust.CurrentRow.Cells[12].Value.ToString(); 
     string Email2 = this.dgv_Cust.CurrentRow.Cells[13].Value.ToString(); 
     string Web = this.dgv_Cust.CurrentRow.Cells[14].Value.ToString(); 
     string Location = this.dgv_Cust.CurrentRow.Cells[16].Value.ToString(); 


     try 
     { 


      DBConn.updateCustInfo1(AccStatus, PostalCode, Name, BusinessName, AltName, Adrs1, Adrs2, City, Province, Phone1, Phone2, Email1, Email2, Web, Location); 
     } 
     catch (Exception es) 
     { 
      MessageBox.Show(es.Message); 

     } 

Как получить ValueMember(IDx) от DisplayMember ("", "Активный", "NotActive", "Другое") из ComboBox в DGV как ComboBox Значение хранится как 'IDx' в базе данных.

ответ

1

Предполагая, что идентификатор является INT:

ComboRecord cr =((DataGridViewComboBoxCell)this.dgv_Cust.CurrentRow.Cells[15]).ValueMember; 
int id = cr.xxx ; // replace xxx by the Id property/variable of the ComboRecord 

Если он не работает, проверьте с помощью отладчика типов следующих элементов:

this.dgv_Cust.CurrentRow.Cells[15].Value 
((DataGridViewComboBoxCell)this.dgv_Cust.CurrentRow.Cells[15]).ValueMember 
+0

Я попытался, как описано выше, но получил «InvalidCastException», указанный литой не является действительным – Vik

+0

Пробовал. error - DataGridViewCell не содержит определения для ValueMember. – Vik

+0

По-прежнему нет. Теперь он дает мне ошибку - невозможно преобразовать тип 'string' в 'int'. это становится смешным ... lol – Vik

1

У меня есть аналогичный проект ASP. NET и я использую FindControl найти COMBOBOX ID

угадываю вы используете форму, я хотел бы попробовать так:

ComboBox cbo = this.Controls.Find("combotBox1", true).FirstOrDefault() as ComboBox; 

Control.ControlCollection.Find Method

Смежные вопросы