2012-10-05 20 views
12

tengo tablas como que en Datagridview:DataGridView Combobox celular establecer la columna

Name Money 
------------- 
Hi  100 //here Combobox with member {10,30,80,100} to choose 
Ki  30 //here Combobox with member {10,30,80,100} to choose 

quiero cambiar valor de columna "Money" de cuadro combinado

he intentado con esto, pero no sé más:

DataTable dt = new DataTable(); 
dt.Columns.Add("Name", typeof(String)); 
dt.Columns.Add("Money", typeof(String)); 
dt.Rows.Add(new object[] { "Hi", 100}); 
dt.Rows.Add(new object[] { "Ki", 30}); 

DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn(); 
var list11 = new List<string>() { "10", "30", "80", "100" }; 
column.DataSource = list11; 
column.ValueMember = "Money"; 
dataGridView1.Columns.Add(column); 

Respuesta

23

probar este

dataGridView1.AutoGenerateColumns = false; 

DataTable dt = new DataTable(); 
dt.Columns.Add("Name", typeof(String)); 
dt.Columns.Add("Money", typeof(String)); 
dt.Rows.Add(new object[] { "Hi", 100 }); 
dt.Rows.Add(new object[] { "Ki", 30 }); 

DataGridViewComboBoxColumn money = new DataGridViewComboBoxColumn(); 
var list11 = new List<string>() { "10", "30", "80", "100" }; 
money.DataSource = list11; 
money.HeaderText = "Money"; 
money.DataPropertyName = "Money"; 

DataGridViewTextBoxColumn name = new DataGridViewTextBoxColumn(); 
name.HeaderText = "Name"; 
name.DataPropertyName = "Name"; 

dataGridView1.DataSource = dt; 
dataGridView1.Columns.AddRange(name, money); 

Sólo tiene que usar en lugar de DataPropertyNameValueMember

1

Usted podría intentar lo siguiente:

DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn(); 
column.Name = "Money"; 
column.DataSource = new string[] { "10", "30", "80", "100" }; 
dataGridView1.Columns.Add(column); 

for (int row = 0; row < dataGridView1.Columns.Count; row++) 
{ 
    DataGridViewComboBoxCell cell = 
     (DataGridViewComboBoxCell)(dataGridView1.Rows[row].Cells["Money"]); 
    cell.DataSource = new string[] { "80", "100" }; 
} 

O esto:

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)(row.Cells["Money"]); 
    cell.DataSource = new string[] { "10", "30" }; 
} 
+0

¿por qué me muestra sólo la primera columna? –

0

Se puede reemplazar con

dt.Columns.Add("Money", typeof(List<string>)); 
3

Usted estábamos casi hecho.

Sólo hay dos problemas menores:

  1. En la tabla que va a agregar a filas "Money" valor como enteros, mientras que en la columna que se definen como cadena
  2. primero Añadir tabla de anuncios DataGridView origen de datos, a continuación, establezca la columna DataPropertyName

código completo a continuación:

var table = new DataTable(); 
table.Columns.Add("Name", typeof(string)); 
table.Columns.Add("Money", typeof(string)); 
table.Rows.Add("Hi", "100"); 
table.Rows.Add("Ki", "30"); 

var column = new DataGridViewComboBoxColumn(); 
column.DataSource = new List<string>() { "10", "30", "80", "100" };    

dataGridView1.Columns.Add(column); 
dataGridView1.DataSource = table; 
0

Sé que es tarde, pero intente esto:

  DataTable dt = new DataTable(); 
      dt.Columns.Add("Name", typeof(String)); 
      dt.Columns.Add("Money", typeof(String)); 
      dt.Rows.Add(new object[] { "Hi", 100 }); 
      dt.Rows.Add(new object[] { "Ki", 30 }); 

      DataTable dt2 = new DataTable(); 
      dt2.Columns.Add("Money", typeof(String)); 
      dt2.Columns.Add("Meaning", typeof(String)); 
      dt2.Rows.Add(new object[] { "30" ,"Name 1" }); 
      dt2.Rows.Add(new object[] { "100", "Name 2" }); 
      dt2.Rows.Add(new object[] { "80", "Name 3" }); 
      dt2.Rows.Add(new object[] { "90", "Name4" }); 

      DataGridViewComboBoxColumn money = new DataGridViewComboBoxColumn(); 

      money.DataSource = dt2; 
      money.HeaderText = "Money"; 
      money.DataPropertyName = "Money"; 
      money.DisplayMember = "Meaning"; 
      money.ValueMember = "Money"; 

      DataGridViewTextBoxColumn name = new DataGridViewTextBoxColumn(); 
      name.HeaderText = "Name"; 
      name.DataPropertyName = "Name"; 

      DGV.Columns.Add(money); 
      DGV.Columns.Add(name); 
      DGV.DataSource = dt; 
0
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DataSource = estatustemp.ToList(); 
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).ValueMember = "Key"; 
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DisplayMember = "Value"; 
Cuestiones relacionadas