CGXDaoGrid::AttachForeignTable
void AttachForeignTable(ROWCOL nCol, CDaoRecordset* pSet, UINT nKeyCol, UINT nDispCol, BOOL bDispAllCols, BOOL bDisplayHeader);
nCol
Specifies the column id in your grid that contains key values.
pSet
Pointer to the recordset with the foreign table (or query).
nKeyCol
The zero-based column id that specifies the column in the foreign recordset with the key values that match the values in the grid column.
nDispCol
The zero-based column id that specifies the column in the foreign recordset to be used for displaying the cell text in the grid.
bDispAllCols
TRUE if you want to display all columns of the foreign recordset in the drop-down list; FALSE if you only want to drop down the text that will be displayed in the cell (column nDispCol).
bDisplayHeader
TRUE if the field names of the columns in the foreign recordset shall be displayed as column headers in the drop-down list; FALSE if no headers shall be displayed.
Remarks
This method lets you attach a table with a foreign key to a column.
The method will open the given recordset, loop through all rows and build up the choice list. This choice list and the GX_IDS_CTRL_TABBED_COMBOBOX cell type will be assigned to the column base style, so that all cells in the column can drop down the foreign table. See CGXTabbedComboBox for a discussion about tabbed combo boxes.
For example, you could attach a foreign table to the column and display a descriptive text for a key (e.g., student name instead of student id).
Note
Once you have attached a foreign table to a column with AttachForeignTable outside changes in this foreign table will not update the choice list. In order to update the column with new changes you have to call AttachForeignTable again.
Example:
// attach the table to the column
CDaoRecordset set(&GetDocument()->m_database);
CString strSQL = _T("Select StudentId, Name From Student");
UINT nKeyCol = 0; // Student Id
UINT nDisplayCole = 1; // Display the name
// Open the foreign recordset (we have to open
// it on our own because we want to specify the SQL query
// dynamically with the call to Open)
set.m_bCheckCacheForDirtyFields = FALSE;
try
{
set.Open(AFX_DAO_USE_DEFAULT_TYPE, strSQL);
}
catch (CDaoException* e)
{
// Tell them the reason it failed to open
AfxMessageBox(e->m_pErrorInfo->m_strDescription);
e->Delete();
return;
}
ResetCurrentCell();
AttachForeignTable(nCol, &set,
nKeyCol, nDispCol, TRUE /* Show all cols */, TRUE /* Show header */);
ResizeColWidthsToFit(CGXRange(GetHeaderRows()+1, nCol));
}
ee AlsoCGXTabbedComboBox