¡Resuelves mis problemas a una velocidad récord. ¡Gracias!
Avalados por :
Utilizo SAP9.0 UI+DI API en C# e intento crear un formulario que muestre una matriz con las propiedades de los ítems y una casilla de verificación delante de ellos, para que si el usuario selecciona algunos, pueda usarlos más tarde como filtro para mis consultas.
Usé un DataTable para enlazar las casillas de verificación a una fuente de datos, pero cada vez que se presiona el botón OK (cuando me gustaría guardar cuáles están marcados), veo que aunque marqué algunos, todos devuelven 'N', lo que significa que ninguno está marcado.
La Matriz
Matrix oMatrix = oForm.Items.Item(ID_MATRIX_TULAJDONSAGOK).Specific;
Columns oColumns = oMatrix.Columns;
Column oColumn = null;
oColumn = oColumns.Add("#", BoFormItemTypes.it_EDIT);
oColumn.TitleObject.Caption = "#";
oColumn.Width = 30;
oColumn.Editable = false;
oColumn = oColumns.Add("CSel", BoFormItemTypes.it_CHECK_BOX);
oColumn.TitleObject.Caption = "seleccionar";
oColumn.Width = 30;
oColumn.Editable = true;
oColumn.ValOn = "Y";
oColumn.ValOff = "N";
oColumn = oColumns.Add("CTul", BoFormItemTypes.it_EDIT);
oColumn.TitleObject.Caption = "Tulajdonság";
oColumn.Width = 60;
oColumn.Editable = false;
Enlazar Datos
private void BindDataSources(Form oForm)
{
oForm.DataSources.DataTables.Add(DataTable_Tulajdonsagok);
DataTable oDataTable = oForm.DataSources.DataTables.Item(DataTable_Tulajdonsagok);
oDataTable.Clear();
oDataTable.Columns.Add(DataTable_Column_Checkbox, BoFieldsType.ft_Text, 1);
oDataTable.Columns.Add("ItmsTypCod", BoFieldsType.ft_Integer, 16);
oDataTable.Columns.Add("ItmsGrpNam", BoFieldsType.ft_Text, 255);
Matrix oMatrix = oForm.Items.Item(ID_MATRIX_TULAJDONSAGOK).Specific;
Columns oColumns = oMatrix.Columns;
Column oColumn = null;
oColumn = oColumns.Item("#");
oColumn.DataBind.Bind(DataTable_Tulajdonsagok, "ItmsTypCod");
oColumn = oColumns.Item("CSel");
oColumn.DataBind.Bind(DataTable_Tulajdonsagok, DataTable_Column_Checkbox);
oColumn = oColumns.Item("CTul");
oColumn.DataBind.Bind(DataTable_Tulajdonsagok, "ItmsGrpNam");
oMatrix.Clear();
oMatrix.AutoResizeColumns();
//Llenar DTABLE
if (tts == null)
{
tts = PreloadTulajdonsagCollection();
}
FillDataTableTulajdonsag(ref oDataTable, tts);
// Consulta
oMatrix.LoadFromDataSource();
// Comprobar valores predeterminados
foreach (TermekTulajdonsagSelect select in tts)
{
if (select.Selected)
{
CheckBox cb = oMatrix.GetCellSpecific("CSel", select.Id-1);
if (cb!=null)
cb.Checked = true;
}
}
}
Llenado
private void FillDataTableTulajdonsag(ref DataTable oDataTable, IList<TermekTulajdonsagSelect> tts)
{
oDataTable.Rows.Clear();
if (tts.Count > 0)
{
oDataTable.Rows.Add(tts.Count);
for(int i = 0; i < tts.Count; i++)
{
oDataTable.SetValue("ItmsTypCod", i, tts[i].Id);
oDataTable.SetValue("ItmsGrpNam", i, tts[i].Name);
oDataTable.SetValue(DataTable_Column_Checkbox, i, (tts[i].Selected)? "Y":"N");
}
}
}
Utilizo el método de llenado, porque cada vez que cargo el formulario, me gust
¡Resuelves mis problemas a una velocidad récord. ¡Gracias!
Hola,
¿Antes de leer la tabla de datos, ejecutaste omatrix.FlushToDataSource()?
Saludos,
Edy
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute