0

私は MySQL .net コネクタを使用して、 と を使用して Datagridview を埋めていMysqladapterますDatagridview.Bindingsource。それはうまくいきますが、私は1つのことを変えたいです:

DataGridview に入力されるテーブルには、テキスト型の列があります。この列のセルはDatagridviewtextboxcelldatagridview では として表示されますが、変更したいDataGridviewComboboxCell(ユーザーは 10 個までの項目から選択する必要があります)。

私はすでに多くのことを試しましたが、何もうまくいきませんでした。DataGridview の列は読み取り専用です。継承しないため、にDefaultCellTemplate変更できません。DataGridviewComboboxCellDataGridviewTextboxcell

私もこれを試しました:Gridview - textboxcellをcomboboxcellに変換して元に戻し、この方法で問題を解決できると思いますが、この解決策には1つの問題もあります.DropDownボタンが表示されません.

どんな助けでも大歓迎です。

4

2 に答える 2

1

これを行うには、新しい DataGridViewComboBoxColumn をグリッドに追加してから、テキスト ボックスの列を非表示にする必要があります。

以下のコードを使用してこれを示しますが、デザイナーを使用して同じことを行うことができます (デザイナーを使用してコードで設定したプロパティを設定するだけです)。

注意すべき重要事項は次のとおりです。

  • DataPropertyName は、グリッドのデータ ソース (おそらくテキスト ボックス ソース) のプロパティを参照します。
  • 列に独自のデータソースを提供する必要があります
  • DisplayMember と ValueMember は、列のデータ ソースを参照します。

列を追加するコードは次のとおりです。

// Here I do this in the form constructor - there are other places you can do it
public Form1()
{
    InitializeComponent();

    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();

    // You need to set some properties on the column to make it work

    // Datasource is the source (usually a list) of objects to show in the combobox
    col.DataSource = dataSource;

    col.DataPropertyName = "ColumnInGridDataSource";
    col.DisplayMember = "DisplayProperty";
    col.ValueMember = "ValueProperty";

    dataGridView1.Columns.Add(col);

    // This hides the textboxcolumn
    dataGridView1.Columns["YourTextBoxColumnName"].Visible = false;
}
于 2012-09-05T16:10:07.063 に答える
1

リンクした回答で、行の前に:

dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] = cb;

追加してみてください:

cb.DisplayStyle = DataGridViewComboBoxDisplayStyle.CHOOSE_ONE;
cb.FlatStyle = FlatStyle.CHOOSE_ONE;

コンボボックスのスタイルをどのように正確に設定したいのかわかりません。そのため、「CHOOSE_ONE」の代わりに、スタイルを試して、必要なスタイルを選択してください。

編集:コンボボックスにまったく変更していないようです。これを試して:

var values = new List<string> { "a", "b", "c" };
var cell = new DataGridViewComboBoxCell();
cell.DataSource = values;
dataGridView1[col, row] = cell;
于 2012-09-05T07:24:38.010 に答える