Recibir valor en un grid

hola estimados, de nuevo yo, les comento, ya pude crear la grilla, llenarla de datos, poner linkedbuttons en la primera linea, colocar y sacar las negritas la selección de una fila, ahora lo que quiero es que cuando en el formulario me busque a un business parner, me seleccione la grilla que tiene por defecto ese cliente o proveedor, para entender de mejor manera lo pondre graficamente:

cuando busco no aparece el método de pago que ya posee el proveedor, en cambio por ejemplo tu entras a busines parner y vas payment run este aparece seleccionado, tal y como esta imagen:

como mencione ya tengo el código para generar obtener el valor de la fila y la creación de la grilla
creacion y llenado de grilla:

oitem = oForm.Items.Item("grdpy");
            oGrid = ((SAPbouiCOM.Grid)(oitem.Specific));
            

            //crear el datasources  y despues dentro de esto se ejecuta la query
            oForm.DataSources.DataTables.Add("grPagdt");
           
                oForm.DataSources.DataTables.Item(0).ExecuteQuery("SELECT distinct t0.PayMethCod AS Código,t0.Descript as Descripción,t0.Active as Activo from OPYM  as t0 left join  ocrd as t1  on t0.PayMethCod= t1.pymcode where t0.type='O'");
                oGrid.DataTable = oForm.DataSources.DataTables.Item("grPagdt");

            
            //cheackbox en el campo activo 
            oGrid.Columns.Item("Activo").Type = SAPbouiCOM.BoGridColumnType.gct_CheckBox;
            //para agregar el link buton a la grilla
            oGrid.Columns.Item("Código").Type = SAPbouiCOM.BoGridColumnType.gct_EditText;
            SAPbouiCOM.EditTextColumn oEdit = (SAPbouiCOM.EditTextColumn)oGrid.Columns.Item("Código");
            oEdit.LinkedObjectType = "147";
            // oGrid.Rows.SelectedRows.Add(pVal.Row);
            RowNumberGrid(oGrid);

y el boton que busca la linea y ponen en negritas la seleccion (solo en creación)

 int oldSelection = -1;
        private void Button2_ClickBefore(object sboObject, SAPbouiCOM.SBOItemEventArg pVal, out bool BubbleEvent)
        {
            BubbleEvent = true;
            try
            {

                if (oGrid.Rows.SelectedRows.Count > 0)   //VERIFICA QUE EXISTA UN ROW SELECCIONADO
                {

                    if (oldSelection != -1)
                        oGrid.CommonSetting.SetRowFontStyle(oldSelection, SAPbouiCOM.BoFontStyle.fs_Plain);

                    int nSelecRow = (oGrid.Rows.SelectedRows.Item(0, SAPbouiCOM.BoOrderType.ot_RowOrder));
                    oldSelection = nSelecRow + 1;
                    //oApp.SetStatusBarMessage("El dato es " + oldSelection + nSelecRow);
                    //seleccion  el row y se destaca en negrita
                    oGrid.CommonSetting.SetRowFontStyle(nSelecRow + 1, SAPbouiCOM.BoFontStyle.fs_Bold);
                    string sValorGrid = Convert.ToString(oGrid.DataTable.GetValue("Código", nSelecRow));
                  
                }

            }
            catch (Exception)

como podría obtener el dato si pongo mi formulario en búsqueda y el cliente/proveedor ya tiene ya marcado una opción?
saludos y gracias!

1 me gusta

Si ya tienes el dato que determina el Metodo de Pago que posee el SN, lo que debes hacer en el grid es lo siguiente:

  • Recorrer el Grid hasta ubicar el valor coincidente.
  • Seleccionar el Row con SelectedRows.Add()
  • Cambiar el Valor de la Columna tipo CheckBox a True o ‘Y’ para Seleccionarlo.
  • Cambiar a Negrita el font de el Row.
string sMetodoPago = Codigo_Metodo_SCSeleccionado;

for (int iRows = 0; iRows < oGrid.Rows.Count - 1; iRows++)
                {
                    if ((string)oGrid.DataTable.GetValue("Codigo",iRows) == sMetodoPago ) 
                    {
                            oGrid0.Rows.SelectedRows.Add(iRows);
                            oGrid.DataTable.SetValue("Activo", iRows, "Y");
                            oGrid.CommonSetting.SetRowFontStyle(iRows+ 1, SAPbouiCOM.BoFontStyle.fs_Bold);                   
                    }
                }

Saludos

4 Me gusta

Hola Gabriel, muchas gracias por responder :), una consulta, es que lo que hago con el boton de fijar el payment seleccion y deseleccion, y utilizo un int oldselection, es decir si la row ya se seleccion cambie el color de la linea , nada mas que eso, pero el valor esta dentro del boton, que sera el
string sValorGrid
pero ese toma ya el valor despues que encontro la linea, pero cuando busco no me tomara a menos que este en las lineas de donde se crea el string no?

es que como te decia cuando creo un proveeor es ok, pero cuando quiero buscar a cualquier no aparece su pymcode (OCRD) y tenia una query como ve cuando creo la grilla:
SELECT distinct t0.PayMethCod AS Código,t0.Descript as Descripción,t0.Active as Activo from OPYM as t0 left join ocrd as t1 on t0.PayMethCod= t1.pymcode where t0.type='O'
mas que nada intentaba obtener ese dato en la misma query…
ojala me puedas aclarar esas dudas, aprendo mucho con tus explicaciones de ante mano
muchas gracias

1 me gusta

Cuando cargas un SN ya existente, debes:

  1. Recargar la Grid de nuevo para limpiarla y asignarle nuevamente el DT con los metodos de pago “Limpios”.
  2. Los metodos de Pagos asociados a los SN tienen 2 opciones, “Incluir” (Checkbox) la cual puede asociar varios registros a un solo SN y estan registrados en la tabla “CRD2” y la Opcion “Fijar Estandar” que coloca por defecto UN solo metodo de los que estan incluidos, este valor se registra en el campo “PymCode” de la tabla “OCRD”.
  3. Por lo tanto debe hacer un select (OCRD y CRD2 entre otros) para obtener los valores respectivos (Metodos Incluidos y Metodo Estandar) que iran a un RS o DT y luego recorrer cada registro contra el Grid como te indique anteriormente e ir marcando los metodos “Incluir” y el metodo “Estandar”.

Saludos.

2 Me gusta

Gracias Gabriel por la ayuda

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.