16

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

8 に答える 8

36

これを試して

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

于 2012-10-05T13:40:47.247 に答える
3

ほぼ完了です。

マイナーな問題は2つだけです。

  1. テーブルでは「Money」値を整数として行に追加していますが、列では文字列として定義されています
  2. 最初にテーブルとDataGridViewDataSourceを追加し、次に列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;
于 2012-10-05T13:38:32.160 に答える
1

次のことを試すことができます。

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" };
}
于 2012-10-05T13:37:00.607 に答える
1

で置き換えることができます

dt.Columns.Add("Money", typeof(List<string>));
于 2012-10-05T13:37:30.150 に答える
1

デザイナでグリッドを設定するときは、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コレクションを変更することでデザイナー内から直接実行できます。

于 2019-03-09T00:15:17.933 に答える
0

私はそれが遅いことを知っていますが、これを試してください:

            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;
于 2015-12-16T07:32:17.997 に答える
0
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DataSource = estatustemp.ToList();
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).ValueMember = "Key";
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DisplayMember = "Value";
于 2016-09-14T22:37:35.327 に答える
0

これは、次のようにVisualStudioデザイナーで非常に簡単に行うことができます。

  1. データグリッドビュー(DGV)を選択(左クリック)します
  2. DGVのプロパティで、[列の編集]リンクをクリックします。ダイアログが開きます。
  3. [選択した列]リストで、コンボボックスに変更する列を選択します
  4. ダイアログの右側の[バインドされていない列のプロパティ]、[デザイン]セクションで、ColumnTypeプロパティを検索します
  5. ColumnTypeプロパティ値をに変更しますDataGridViewComboBoxColumn
  6. [データ]セクションで、[アイテム]の右側にある3つのドットをクリックし、文字列コレクションエディタに追加する値を入力します。
  7. [OK]をクリックして変更を保存します。

アプリケーションを実行します。これで、手順6で入力した値がドロップダウンボックスに表示されます。

ここに画像の説明を入力してください

于 2019-09-20T08:07:10.153 に答える