0

DataGridView ComboBoxで値を選択し、bindingnavigatorで保存ボタンをクリックした後、データはデータベースで更新されません。データを更新するには、ユーザーはフォーカスを失う必要があります。この問題を解決する方法はありますか?

4

2 に答える 2

1

変。私は最近これをしました、そしてそれは魅力のように働きました。私のアプリケーションでは、グリッドビューが編集モード(読み取り専用false)の場合、セルを選択するとコンボボックスになり、セルを離れるとテキストボックスとして動作します。これが私がしたことです

void dgUpdateItems_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    DataGridView dg = (DataGridView)sender;
    if (e.ColumnIndex == dg.Columns["ItemCategory"].Index)
    {
        if (e.ColumnIndex == e.RowIndex)
        {
            dg[e.ColumnIndex, e.RowIndex].ReadOnly = true;
            return;
        }
        DataGridViewComboBoxCell cmbCell = new DataGridViewComboBoxCell();
        ComboUpdate(cmbCell);
        cmbCell.Value = ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value.ToString();
        ((DataGridView)sender)[e.ColumnIndex, e.RowIndex] = cmbCell;
    }
}

void dgUpdateItems_CellLeave(object sender, DataGridViewCellEventArgs e)
{
    DataGridView dg = (DataGridView)sender;
    if (e.ColumnIndex == dg.Columns["ItemCategory"].Index)
    {
        if (e.ColumnIndex == e.RowIndex)
            return;

        string str = dg[e.ColumnIndex, e.RowIndex].Value.ToString();
        DataGridViewComboBoxCell cmb = (DataGridViewComboBoxCell)dg[e.ColumnIndex, e.RowIndex];
        string val = cmb.Value.ToString();

        dg[e.ColumnIndex, e.RowIndex] = new DataGridViewTextBoxCell();
        dg[e.ColumnIndex, e.RowIndex].Value = val;

理解していない場合、それは私のコードの一部です、私に知らせてください。こちらがリンクです。チェックしてください。それは役立つかもしれません。 編集モードのDatagridViewのComboBox

そして申し訳ありませんが、最も重要なことを言うのを忘れました、それは焦点を合わせても機能しました。そして、何か他のものを探しているなら、私の頭に石を投げてください。それが役に立てば幸い。

于 2011-09-30T14:20:47.960 に答える
0

UpdateSource次のように保存する前に電話してみてください。

ComboBox c = Keyboard.FocusedElement as ComboBox;
if ((c != null) && (c.GetBindingExpression(ComboBox.TextProperty) != null))
  c.GetBindingExpression(ComboBox.TextProperty).UpdateSource();

HTH

于 2011-09-28T08:08:31.750 に答える