1

データベースからのデータが取り込まれる datagridview があります。最後の 2 つの列はコンボボックスとボタンです。

ちらつきを防ぐためRows.AddRangeに、すべての行を一度に追加するために使用します (手順全体はバックグラウンドワーカーにあります)。

私の質問は、ドロップダウン ボックスに値を追加する方法です。アイテムは単なる文字列のリストであるため、データソースにする必要はありません。

DataTable dt = db.fill(query, dbpars);
DataGridViewComboBoxCell cbox = new DataGridViewComboBoxCell();
cbox.Items.Add("--Please Select--");
cbox.Items.Add("Generate");
cbox.Items.Add("Ignore");

List<DataGridViewRow> rowList = new List<DataGridViewRow>();

foreach (DataRow row in dt.Rows)
{
    DataGridViewRow drow = new DataGridViewRow();
    drow.CreateCells(dgvClientWork);

    drow.Cells[0].Value = row[0];
    drow.Cells[1].Value = row[1];
    drow.Cells[2].Value = row[2];
    drow.Cells[3].Value = row[3];
    drow.Cells[4].Value = row[4];
    drow.Cells[5].Value = row[5];

    //((DataGridViewComboBoxColumn)dgvClientWork.Columns[6]).Items.Add("2");
    //var td = new DataGridViewComboBoxCell();
    //drow.Cells[6] = td;
    //((DataGridViewComboBoxCell) drow.Cells[6]).Items.Add("WFT");

    DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)dgvClientWork.Rows[0].Cells[6];

    td.Items.Add("--Please Select--");
    td.Items.Add("Generate");
    td.Items.Add("Ignore");

    //td.Items.AddRange(new object[]{"--Please Select--", "Generate", "Ignore"});

    //var t = (DataGridViewComboBoxCell)cbox.Clone();
    //drow.Cells.Add(t);
    //drow.Cells[6] = t;
    //drow.Cells[6].Value = "--Please Select--";
    /*drow.Cells[7].Value = btn;*/

    rowList.Add(drow);
}

Action action = () => dgvClientWork.Rows.AddRange(rowList.ToArray());
dgvClientWork.Invoke(action);

ご覧のとおり、いくつかのことを試みましたが、コンボボックスは常に空白です。

4

1 に答える 1

0

問題を正しく複製した場合、dgv の最後の行を確認すると、そのドロップダウンには追加されたアイテムの倍数が表示されます。

修正するには、次のコード行を変更します。

DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)dgvClientWork.Rows[0].Cells[6];

これに:

DataGridViewComboBoxCell td = (DataGridViewComboBoxCell)drow.Cells[6];

編集:セルをデフォルトにしたい場合は、追加するだけです

td.Value = "--Please Select--";

それから私のために働きました。

編集: DGV を作成して列を追加したときに、ComboBoxColumn を作成し、その DataSource をコードで設定したのと同じ文字列のリストに設定しただけです。このようにして、ユーザーが新しく追加した行にも同じコンボボックス ソースが含まれます。現時点では、新しい行には空のコンボボックスがあります。

于 2015-01-26T23:11:50.890 に答える