1

LINQクエリから入力しているDataGridViewがあります。列の1つはFKであるため、このフィールドを表示するためにComboBox列を追加しました。これは正常に表示されます。

私が抱えている問題は、ComboBoxがロックされているかのように動作するため、ComboBoxの値を変更できないことです。DGVとColumnの両方のReadOnlyプロパティを確認しましたが、どちらもfalseです。

誰かが私が欠けているものに光を当てることができますか?

DGVに入力するコードは次のとおりです。

    private void PopulateForm()
    {
        DBDataContext db = new DBDataContext();

        var eventTypes =
            from evt in db.EVENT_TYPEs
                .Where(a => a.Omit == false)
                .OrderBy(a => a.EventType)
            select new
            {
                EventTypeID = evt.EventTypeID,
                EventType = evt.EventType,
                UpdateToStatusID = evt.UpdateToStatusID,
                AttachmentAllowedYn = evt.AttachmentAllowedYn,
                AttachmentRequiredYn = evt.AttachmentRequiredYn,
                CommentRequiredYn = evt.CommentRequiredYn
            };

        var statuses =
            from sts in db.STATUS
                .Where(a => a.Omit == false)
            select new
            {
                StatusID = sts.StatusID,
                Status = sts.TechreqStatus
            };

        DataGridView dgv = this.dgvEventTypes;
        DataGridViewColumn col;

        dgv.AutoGenerateColumns = false;
        col = dgv.Columns[dgv.Columns.Add("EventTypeID", "EventTypeID")];
        col.DataPropertyName = "EventTypeID";

        col = dgv.Columns[dgv.Columns.Add("EventType", "Event Type")];
        col.DataPropertyName = "EventType";

        DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn();
        comboCol.Name = "UpdateToStatusID";
        comboCol.HeaderText = "Update To Status";
        comboCol.DataPropertyName = "UpdateToStatusID";
        comboCol.DataSource = statuses;
        comboCol.ValueMember = "StatusID";
        comboCol.DisplayMember = "Status";
        dgv.Columns.Add(comboCol);

        col = dgv.Columns[dgv.Columns.Add("AttachmentAllowedYn", "Attachments Allowed Yn")];
        col.DataPropertyName = "AttachmentAllowedYn";

        col = dgv.Columns[dgv.Columns.Add("AttachmentRequiredYn", "Attachment Required Yn")];
        col.DataPropertyName = "AttachmentRequiredYn";

        col = dgv.Columns[dgv.Columns.Add("CommentRequiredYn", "Comment Required Yn")];
        col.DataPropertyName = "CommentRequiredYn";

        dgv.DataSource = eventTypes;

        db.Dispose();
    }

どうもありがとう

4

1 に答える 1

5

匿名タイプを使用しているからだと思います。あなたの場合、元のタイプ(evtとstsのタイプ)を使用できます

var eventTypes = from evt in db.EVENT_TYPEs where !evt.Omit order by evt.EventType
                 select evt

var statuses = from sts in db.STATUS where !sts.Omit
               select sts

または

ビューモデルとして機能するPOCOオブジェクトを作成します

var eventTypes = from evt in db.EVENT_TYPEs where !evt.Omit order by evt.EventType
                 select new EventTypesObject() {EventTypeID = evt.EventTypeID, ...}

var statuses = from sts in db.STATUS where !sts.Omit
               select new StatusObject() {StatusID = sts.StatusID, Status = sts.TechreqStatus}

これにより、双方向のバインディングが必要な場合に、INotifyPropertyChangingとINotifyPropertyChangedの実装が容易になります。

于 2012-11-23T14:55:12.240 に答える