Подтвердить что ты не робот

Набор столбцов ячейки DataGridView Combobox

У меня есть таблицы, подобные этому в Datagridview:

 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

Я хочу изменить значение столбца "Деньги" из поля со списком

Я попытался с этим, но не знаю далее:

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

Ответ 1

Попробуйте это

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

Просто используйте DataPropertyName вместо ValueMember

Ответ 2

Вы почти закончили.

Есть только две незначительные проблемы:

  • В вашей таблице вы добавляете к строкам значение "Деньги" как целые числа, тогда как в столбце они определяются как строка
  • Сначала добавьте свое табличное объявление DataGridView DataSource, а затем установите столбец DataPropertyName

Полный код ниже:

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;

Ответ 3

Вы можете попробовать следующее:

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

Или это:

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

Ответ 4

Вы можете заменить на

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

Ответ 5

Обратите внимание на индекс вашего столбца ComboBox при настройке сетки в конструкторе. В этом примере он равен 1. Столбец Money является индексом 1. В сетке уже есть элемент DataGridViewComboBoxColumn. Когда вы инициализируете форму, содержащую элемент управления, получите его и инициализируйте. Вот так:

DataGridViewComboBoxColumn cbc = (DataGridViewComboBoxColumn)dataGridView1.Columns[1];
cbc.Items.Add("10");
cbc.Items.Add("30");
cbc.Items.Add("80");
cbc.Items.Add("100");

При заполнении сетки вставьте текстовые значения в эту ячейку. Когда пользователь щелкнет ячейку, появится раскрывающийся список, и он сможет изменить значение.

На самом деле, если все, что вы хотите сделать, это просто создать выпадающий список с этими значениями, вы можете сделать это прямо из конструктора, изменив коллекцию Items.

Ответ 6

Я знаю это поздно, но попробуйте следующее:

            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;

Ответ 7

((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DataSource = estatustemp.ToList();
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).ValueMember = "Key";
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DisplayMember = "Value";

Ответ 8

Вы можете сделать это очень легко в конструкторе Visual Studio следующим образом:

  1. Выберите (щелкните левой кнопкой мыши) представление сетки данных (DGV)
  2. В свойствах DGV нажмите ссылку "Редактировать столбцы". Откроется диалоговое окно.
  3. В столбце "Выбранные столбцы" list
  4. выберите столбец, который хотите изменить на комбинированный список.В правой части диалогового окна в разделе "Свойства несвязанного столбца", в разделе "Дизайн" найдите свойство ColumnType
  5. .Измените значение свойства ColumnType на DataGridViewComboBoxColumn
  6. Сохранить изменения