2012-10-05 40 views
12

Tôi có bảng như thế trong DataGridView:DataGridView Combobox di động thiết lập cột

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 

Tôi muốn thay đổi cột "Money" Giá trị từ combobox

tôi đã cố gắng với điều này nhưng không biết thêm:

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); 

Trả lời

23

Hãy thử điều này

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); 

Chỉ cần sử dụng DataPropertyName thay vì ValueMember

1

Bạn có thể thử cách sau:

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" }; 
} 

Hoặc này:

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

tại sao nó chỉ cho tôi chỉ là cột đầu tiên? –

0

Bạn có thể thay thế với

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

Bạn đã gần như hoàn tất.

Chỉ có hai vấn đề nhỏ:

  1. Trong bảng của bạn, bạn được thêm vào hàng "Money" giá trị như số nguyên, trong khi ở cột của bạn chúng được định nghĩa như chuỗi
  2. Đầu tiên thêm DataGridView quảng cáo bảng của bạn DataSource, và sau đó thiết lập cột DataPropertyName

Full mã bên dưới:

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

Tôi biết đó là muộn nhưng Hãy thử điều này:

  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"; 
Các vấn đề liên quan