This is a migrated thread and some comments may be shown as answers.

Problems loading the detail table.

3 Answers 144 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Carlos Rodriguez
Top achievements
Rank 1
Carlos Rodriguez asked on 12 Apr 2011, 04:12 PM

Hello programmers, i hope now you can help me.
I have a grid that each item has its table of detail, yet each detail table is different, because they may have a different number of columns.
I modify the structure from the code, however, when I expand the detail table shows the previous structure and expand a second time, shows the correct structure.
Is there any way to display the existing economic structure right the first time?

Annex code and images.

-- ASPX ========================================================================

<Telerik:RadGrid ID="radGriOrdComDetalles" runat="server" Width="980" AutoGenerateColumns="false"
                             AllowAutomaticDeletes="false" AllowAutomaticInserts="false" AllowAutomaticUpdates="false">
                                <MasterTableView DataKeyNames="Id, prodSkucode" CommandItemDisplay="None"
                                 EditMode="InPlace" NoDetailRecordsText =" " NoMasterRecordsText="">
                                    <Columns>
                                        <Telerik:GridBoundColumn UniqueName="colIdOrdCompra" HeaderText="Id orden de compra" DataField="Id" HeaderStyle-Width="130px"/>
                                        <Telerik:GridBoundColumn UniqueName="colSku" HeaderText="SKU" DataField="prodSkucode" HeaderStyle-Width="160px"/>
                                        <Telerik:GridBoundColumn UniqueName="colDescripcion" HeaderText="Descripcion" DataField="prodDescripcion" HeaderStyle-Width="300px"/>                               
                                        <Telerik:GridBoundColumn UniqueName="colDepartamento" HeaderText="Departamento" DataField="depaDescripcion" HeaderStyle-Width="180px"/>                     
                                    </Columns>
                                    <DetailTables>
                                        <Telerik:GridTableView Name="gridProductoDetalles" DataKeyNames="Id, prodSkucode" EditMode="InPlace" NoDetailRecordsText="" NoMasterRecordsText=""
                                          GridLines="Vertical">
                                        </Telerik:GridTableView>
                                    </DetailTables>
                                </MasterTableView>
                            </Telerik:RadGrid>

-- CODE BEHIND =======================================================================
void radGriOrdComDetalles_DetailTableDataBind(object sender, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
        {
            try
            {
                if (e.DetailTableView.Name == "gridProductoDetalles")
                {
                    Telerik.Web.UI.GridDataItem parentItem = e.DetailTableView.ParentItem;
                    strSkucode = parentItem.Cells[3].Text;
                    strIdOrdCompra = parentItem.Cells[2].Text;
  
                    DataTable datTabDatosDetalle = new DataTable();
                    if (ViewState["OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode] == null)
                        datTabDatosDetalle = CCSMovimientoProductos.BuscarProdDetOrdenCompra_CEDIS(strIdOrdCompra, strSkucode).Tables[0];
                    else
                        datTabDatosDetalle = (DataTable)ViewState["OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode];
                        //e.DetailTableView.DataSource = datTabDatosDetalle;
  
  
  
                    // SE AGREGAN LAS COLUMNAS CORRESPONDIENTES.
  
                    radGriOrdComDetalles.MasterTableView.DetailTables[0].Columns.Clear();
                    radGriOrdComDetalles.MasterTableView.DetailTables[0].Rebind();
  
                    Telerik.Web.UI.GridBoundColumn campo;
                    foreach (DataColumn dc in datTabDatosDetalle.Columns)
                    {
                        campo = new Telerik.Web.UI.GridBoundColumn();
                        radGriOrdComDetalles.MasterTableView.DetailTables[0].Columns.Add(campo);
  
                        campo.UniqueName = "col" + dc.ColumnName;
                        campo.HeaderText = "[ " + dc.ColumnName + " ]";
                        campo.HeaderStyle.Font.Bold = true;
                        campo.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                        campo.DataField = dc.ColumnName;
  
                        if (dc.ColumnName == "Talla")
                            campo.ReadOnly = true;
                    }
  
                    Telerik.Web.UI.GridEditCommandColumn campoEdit = new Telerik.Web.UI.GridEditCommandColumn();
                    campoEdit.UniqueName = "colEdit";
                    radGriOrdComDetalles.MasterTableView.DetailTables[0].Columns.Add(campoEdit);
                    campoEdit.UniqueName = "colEdit";
                    campoEdit.ButtonType = Telerik.Web.UI.GridButtonColumnType.LinkButton;
                    campoEdit.EditText = "Editar";
                    campoEdit.UpdateText = "Actualizar";
                    campoEdit.CancelText = "Cancelar";
    
                    // SE AGREGA EN EL VIEWSTATE LA REGLETA CORRESPONDIENTE AL PRODUCTO
                    if (ViewState["OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode] == null)
                        ViewState.Add("OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode, datTabDatosDetalle);
                    else
                        ViewState["OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode] = datTabDatosDetalle;
  
                    // SE AGREGAN LOS DATOS FINALES AL SOURCE DEL GRID.
                    radGriOrdComDetalles.MasterTableView.DetailTables[0].DataSource = datTabDatosDetalle;
  
                    radGriOrdComDetalles.MasterTableView.DetailTables[0].Columns[0].Visible = false;
                    radGriOrdComDetalles.MasterTableView.DetailTables[0].Columns[1].Visible = false;
  
                    radGriOrdComDetalles.MasterTableView.DetailTables[0].CommandItemDisplay = Telerik.Web.UI.GridCommandItemDisplay.Top;
                    radGriOrdComDetalles.MasterTableView.DetailTables[0].EditMode = Telerik.Web.UI.GridEditMode.InPlace;
                    radGriOrdComDetalles.Rebind();
                }
            }
            catch (Exception ex)
            {
            }
        }

-- CODE BEHIND =======================================================================

3 Answers, 1 is accepted

Sort by
0
Carlos Rodriguez
Top achievements
Rank 1
answered on 13 Apr 2011, 04:55 PM
Thanks for not helping me, one after buying the license to ignore it. Does my problem is very difficult for developers to Telerik?

Greetings.
Carlos A. Rodríguez
0
Jayesh Goyani
Top achievements
Rank 2
answered on 14 Apr 2011, 07:38 AM
Hi

plz remove below code from _DetailTableDataBind event its not needed there.
RadGriOrdComDetalles.Rebind();

let me know if any concern.

Thanx,
Jayesh Goyani
0
Carlos Rodriguez
Top achievements
Rank 1
answered on 14 Apr 2011, 02:27 PM
Hi Jayesh thank you very much for your response.
He had done what he told me, but still the same.

Caimbié by the following code to annex here, detail is shown correctly, but clicking on the link to edit, the detail disappears.

Any idea what can be?

The code is inside the method DetailTableDataBind
Telerik.Web.UI.GridDataItem parentItem = e.DetailTableView.ParentItem;
                strSkucode = parentItem.Cells[3].Text;
                strIdOrdCompra = parentItem.Cells[2].Text;
  
                DataTable datTabDatosDetalle = new DataTable();
                if (ViewState["OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode] == null)
                    datTabDatosDetalle = CCSMovimientoProductos.BuscarProdDetOrdenCompra_CEDIS(strIdOrdCompra, strSkucode).Tables[0];
                else
                    datTabDatosDetalle = (DataTable)ViewState["OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode];
  
                // SE AGREGAN LAS COLUMNAS CORRESPONDIENTES.
  
                Telerik.Web.UI.GridBoundColumn campo;
                foreach (DataColumn dc in datTabDatosDetalle.Columns)
                {
                    campo = new Telerik.Web.UI.GridBoundColumn();
                    e.DetailTableView.Columns.Add(campo);
  
                    campo.UniqueName = "col" + dc.ColumnName;
                    campo.HeaderText = "[ " + dc.ColumnName + " ]";
                    campo.HeaderStyle.Font.Bold = true;
                    campo.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                    campo.DataField = dc.ColumnName;
  
                    if (dc.ColumnName == "Talla")
                        campo.ReadOnly = true;
                }
  
                Telerik.Web.UI.GridEditCommandColumn campoEdit = new Telerik.Web.UI.GridEditCommandColumn();
                campoEdit.UniqueName = "colEdit";
                campoEdit.ButtonType = Telerik.Web.UI.GridButtonColumnType.LinkButton;
                campoEdit.EditText = "Editar";
                campoEdit.UpdateText = "Actualizar";
                campoEdit.CancelText = "Cancelar";
                e.DetailTableView.Columns.Add(campoEdit);
  
                if (ViewState["Mov_IdActualEditando"] != null)
                {
                    DataTable datDats = (DataTable)ViewState["OrdCompraProdDetalles"];
                    foreach (DataRow itemR in datDats.Rows)
                    {
                        for (int column = 3; column < datTabDatosDetalle.Columns.Count; column++)
                        {
                            if (itemR["Id"].ToString() == datTabDatosDetalle.Rows[0][0].ToString())
                            {
                                if (itemR["prodSkucode"].ToString() == datTabDatosDetalle.Rows[0][1].ToString())
                                {
                                    if (itemR["prodSize_Id"].ToString().ToUpper() == datTabDatosDetalle.Rows[6][column].ToString().ToUpper())
                                    {
  
                                        datTabDatosDetalle.Rows[5][column] = itemR["cantidad"].ToString();
  
                                        if (Int32.Parse(datTabDatosDetalle.Rows[1][column].ToString()) < Int32.Parse(itemR["cantidad"].ToString()))
                                        {
                                            datTabDatosDetalle.Rows[1][column] = Int32.Parse(itemR["cantidad"].ToString()) - Int32.Parse(datTabDatosDetalle.Rows[1][column].ToString());
                                        }
                                        else
                                        {
                                            datTabDatosDetalle.Rows[1][column] = Int32.Parse(datTabDatosDetalle.Rows[1][column].ToString()) - Int32.Parse(itemR["cantidad"].ToString());
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
  
  
                // SE AGREGA EN EL VIEWSTATE LA REGLETA CORRESPONDIENTE AL PRODUCTO
                if (ViewState["OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode] == null)
                    ViewState.Add("OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode, datTabDatosDetalle);
                else
                    ViewState["OrdCompraProdDetallesSub" + strIdOrdCompra + strSkucode] = datTabDatosDetalle;
  
                // SE AGREGAN LOS DATOS FINALES AL SOURCE DEL GRID.
  
                e.DetailTableView.Columns[0].Visible = false;
                e.DetailTableView.Columns[1].Visible = false;
                e.DetailTableView.EditMode = Telerik.Web.UI.GridEditMode.InPlace;
                e.DetailTableView.CommandItemDisplay = Telerik.Web.UI.GridCommandItemDisplay.Top;
                radGriOrdComDetalles.MasterTableView.DetailTables[0].EditMode = Telerik.Web.UI.GridEditMode.InPlace;
                radGriOrdComDetalles.MasterTableView.DetailTables[0].DataSource = datTabDatosDetalle;
                e.DetailTableView.DataSource = datTabDatosDetalle;
Tags
Grid
Asked by
Carlos Rodriguez
Top achievements
Rank 1
Answers by
Carlos Rodriguez
Top achievements
Rank 1
Jayesh Goyani
Top achievements
Rank 2
Share this question
or