2

8列のコンボボックスと32行で満たされたdatagridviewがあります。

    private void frm_Main_Load(object sender, EventArgs e)
    {
        // Make 32 rows total
        for (int i = 0; i <= 30; i++)
        {
            DataGridView1.Rows.Add();
        }
        PopulateComboBoxes();
    }

また、それぞれにいくつかのアイテムを追加しました。どういうわけか、クリックしてもドロップダウンしません。

私は周りを見回しましたが、何も機能していないようです。

編集:ドロップダウンオプションのそれぞれを追加するだけです

    public void PopulateDropDowns()
    {
        //Get Errors
        DataSet Errors = SendQueryReturnDataSet("SELECT * FROM DB.Errors");
        DataTable dt_Errors = Errors.Tables[0];

        //Populate all Drop Downs
        for (int i = 0; i < dt_Errors.Rows.Count; i++)
        {
            for (int x = 0; x<8; x++)
            {
                for (int y = 0; y < 32; y++)
                {
                    (grid_Wafer.Rows[x].Cells[y] as DataGridViewComboBoxCell).Items.Add(dt_Errors.Rows[i][1].ToString());
                }
            }
        }

    }
4

5 に答える 5

2

このような問題がありました。デバッガーで見つかったのは、DataGridViewComboBoxCells の ReadOnly プロパティが True に設定されていたことです。これは、デザイン モードで作成したときに、列全体のプロパティを False のままにしたにもかかわらずです。セルまたは列が読み取り専用に設定されている場所が見つかりませんでした。私のコードでは、データ ソースに割り当てた後に読み取り専用をオフに切り替えましたが、コンボ ボックスは問題なく表示されるようになりました。

編集: グリッドの RowTemplate で Readonly が True に設定されていることがわかりました。これがこの問題の原因でした。いろいろ設定を試していたときに起こったのではないかと思います。

于 2012-09-04T10:55:44.083 に答える
1

これを数回ヒットしたところ、DataGridView ComboBox 列が読み取り専用フィールドにバインドされている (つまり、setter が定義されていない) 場合、読み取り専用として表示されることがわかりました。Rob Hincliff が提案した答えを試すと、次の例外が発生します。読み取り専用フィールドにバインドされた DataGridView 列には、ReadOnly を True に設定する必要があります。

于 2015-11-04T14:23:09.780 に答える
1

これを正確に解決するには、より多くの情報が必要です。フロントエンドのコードと、PopulateComboBoxes() メソッドを見せていただけますか?

頭のてっぺんから、頭に浮かぶいくつかのこと...

  • 何らかの理由で、ドロップダウンが適切に入力されていません (ページのソースを表示して、アイテムが実際にドロップダウン リストに追加されているかどうかを確認してください)。

  • もしかしてスタイリングの問題?(z-index プロパティを確認し、ドロップダウンよりも高いスタックに何もないことを確認してください。ドロップダウンの z-index を 99999 に設定してみてください)

上記の提案があっても、適切な回答を得るには、さらに多くのコードを確認する必要があります。

于 2012-05-29T18:39:02.603 に答える
0
private void Form1_Load(object sender, EventArgs e)
{
    PopulateComboBoxes();
    // Make 32 rows total
    for (int i = 0; i <= 30; i++)
    {
        dataGridView1.Rows.Add();
    }
}

private void PopulateComboBoxes()
{
    //for each column, set as combobox, then populate
    var cName = new DataGridViewComboBoxColumn();
    cName.Items.Add("John Galt");
    cName.Items.Add("Tim Duncan");
    cName.Items.Add("King Leonidas");
    var cAddress = new DataGridViewComboBoxColumn();
    cAddress.Items.Add("Main Street");
    cAddress.Items.Add("Broad Street");
    cAddress.Items.Add("Market Street");

    dataGridView1.Columns.Add(cName);
    dataGridView1.Columns.Add(cAddress);

}
于 2012-05-29T18:42:00.263 に答える