2

私はこれを機能させることができません。私はwinformsにdatagridviewを持っており、この列の1つはDataGridViewComboBoxColumnです。

私のコンストラクターでは、そのように設定しました

DataGridViewComboBoxColumn column = (DataGridViewComboBoxColumn)RectangleGrid.Columns["Material"];

        DataTable data = new DataTable();

        data.Columns.Add(new DataColumn("Value", typeof(int)));
        data.Columns.Add(new DataColumn("Description", typeof(string)));

        foreach (Materials M in DataStructure.Active.Active_Materials)
        {
            data.Rows.Add(M.MaterialNr, (M.MaterialNr + 1).ToString() + " " + M.Material.Name);
        }

        column.DataSource = data;
        column.ValueMember = "Value";
        column.DisplayMember = "Description";

そして、私が望むドロップダウンボックスで何も選択されていないことを除いて、それは実際にうまく機能します。私はこれをグーグルで検索し、たとえばこのアプローチを試しました:http: //goo.gl/kBy8Wしかし、EditingControlShowingはボックスをクリックしたときにのみ発生し、最初に表示されたときでは発生しないためです(クリックすると選択したインデックスを設定できます)しかし、それは良くありません)。CellFormattingバージョンは少なくとも値を変更しますが、データソースからの最初のインデックスではなく文字列をそこに配置するだけです。

私もこれを試しました

column.DefaultCellStyle.NullValue = data.Rows[0]["Description"];
column.DefaultCellStyle.DataSourceNullValue = data.Rows[0]["Value"];

それは機能しているように見えましたが、ドロップダウンで最初のインデックスを選択すると(ドロップダウンをドロップして最初のインデックスを選択し、セルを選択解除します)、ParseFormattedValueから「値」をに変換できないというエラーが発生しましたsystem.String。

これは正しい方向に進んでいるように見えましたが、動作させることができませんでした:http: //goo.gl/VevA3

4

1 に答える 1

0

私はそれを私が好きではない非常に汚い解決策で「解決」することになりましたが、それは一種の仕事です。

datagridviewを(データベースではなく)データテーブルにバインドしたので、イベントハンドラーをデータテーブルのTableNewRowイベントに接続しました。

それから私はそのイベントハンドラーでこれをしました

    private void NewRectangleInserted(Object sender, DataTableNewRowEventArgs e)
    {
        if (e.Row[0].ToString() == "")
        {
            e.Row[0] = 0;
        }
    }

したがって、基本的に、新しい行が作成されるとき、ユーザーがその特定のセルに値を追加して行を作成しない限り、コンボボックスの値を0に設定します(なぜそれが ""に等しいかどうかを確認します)

その結果、新しい行または行内の任意のセルを強調表示するとすぐにコンボボックスが入力されます。ただし、強調表示するまで、ボタンの新しい行には空白のコンボボックスが残ります。

完璧ではありませんが、はるかに優れています。悪いことに、それはハックで行われなければなりませんでした!

于 2012-12-14T00:43:09.403 に答える