Resolve meus problemas a uma velocidade recorde. Obrigado!
Avalados por :
Estou usando SAP9.0 UI+DI API em C# e tentando criar um formulário que exiba uma matriz com as propriedades dos itens e uma caixa de seleção na frente deles, para que o usuário possa selecionar alguns e usá-los posteriormente como filtro para minhas consultas.
Usei um DataTable para vincular as caixas de seleção a uma fonte de dados, mas sempre que pressiono o botão OK (para salvar os marcados), percebo que, embora eu tenha marcado alguns, todos retornam 'N', o que significa que nenhum está marcado.
A 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 = "selecionar";
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;
Vincular Dados
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();
//Preencher DTABLE
if (tts == null)
{
tts = PreloadTulajdonsagCollection();
}
FillDataTableTulajdonsag(ref oDataTable, tts);
// Consulta
oMatrix.LoadFromDataSource();
// Verificar valores padrão
foreach (TermekTulajdonsagSelect select in tts)
{
if (select.Selected)
{
CheckBox cb = oMatrix.GetCellSpecific("CSel", select.Id-1);
if (cb!=null)
cb.Checked = true;
}
}
}
Preenchimento
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");
}
}
}
Resolve meus problemas a uma velocidade recorde. Obrigado!
Olá,
Antes de ler a tabela de dados, você executou omatrix.FlushToDataSource()?
Saudações,
Edy
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute