C ++ MFC DataGrid в CAFSDialog, где диалог Edit не работает - PullRequest
0 голосов
/ 04 марта 2019

Dialog

У меня есть сетка, как прикрепленное изображение.

Это приложение MFC, в котором у меня есть диалог с ID, Desc и Grid.Сетка имеет три поля.И все эти поля хранятся в одной и той же таблице.

Моя логика работает для ADD, а в случае EDIT - с трудностями при обновлении и удалении строки сетки.

bool CEditCCBTemplateDlg::UpdateObject()
            {
                CString strMessage = ValidateUccs();
                if (strMessage.GetLength() > 0) {
                return false;
                }
                if ( m_dlgType != display ) {
            CString sRuleID = _T("");
            CString sPayLoad = _T("");
            DBRaw rawRuleID, rawPayLoad;

            bool delExistingObj = CCBTemplate::Mgr().DeleteAll((DBlong)m_TempRuleKey);

            int numRows= m_pRulesInfoGrid->GetRowCount();

/*during edit, m_pObject will have edited temp key and description but i need to consider the grid also so 
i am deleteing all the db entries with that temp key and recreating object
*/
/*
if(!m_pObject)
m_pObject = new CCBTemplate();
else
m_pObject->SetState(CDBObject::altered);
If i use it like this , t works with only one row.
*/
            for( int nRowIndex = 1; nRowIndex <= m_pRulesInfoGrid->GetRowCount(); nRowIndex++) {
            m_pObject = new CCBTemplate();

            CCBTemplate* lpDBObject = static_cast< CCBTemplate* >( m_pObject ) ;

            lpDBObject->SetTempRuleKeyUCCS(m_TempRuleKey);
            lpDBObject->SetDescription(m_UIDescr);

            sRuleID = m_pRulesInfoGrid->GetValueRowCol(nRowIndex,RULE_ID_COL);
            lpDBObject->SetUCCSRuleID(rawRuleID);

            sPayLoad = m_pRulesInfoGrid->GetValueRowCol(nRowIndex,PAYLOAD_COL);
            lpDBObject->SetUCCSPayLoad(rawPayLoad);
            lpDBObject->SetUCCSSequenceNum(_ttol(m_pRulesInfoGrid->GetValueRowCol(nRowIndex,SEQ_ID_COL)));
            CCBTemplate::Mgr().Add(lpDBObject,NULL );
                }    
                }
                return true;
            }

Предположим, что при редактировании, если я изменю объект диалога, я получу один объект, и у меня не будет контроля над сеткой.Поэтому я игнорирую существующий m_pObject (dialogObjetct) и создаю новый объект для каждой строки сетки.

Однако из метода setdata () он получает старый объект и не отображает правки.

Есть ли какой-нибудь способ, которым я могу обработать детали Temprulekey и Grid в Edit.

Я действительно ценю ваши предложения.спасибо

...