hello
I am using a radgrid with a master table view and details table, I can update my master table view with a stored procedure however I cannot update detail table with another stored procedure. The two updates must be done simultaneously with the save button of radgrid in edit mode.
Here is what I did for my master table view, it works and i would like to do the same button on my detail table, Can you help me pls
protected void RadGrid1_UpdateCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
{
GridEditableItem editedItem = e.Item as GridEditableItem;
string pID_OF = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["ID_OF"].ToString();
string pNO_WO = (editedItem["NO_OF"].Controls[0] as TextBox).Text;
string pRef = (editedItem["CodeArticle"].Controls[0] as TextBox).Text;
string pQte = (editedItem["QteLancee"].Controls[0] as TextBox).Text;
string pStatut_WO = (editedItem["StatutOF"].Controls[0] as TextBox).Text;
string pDate_WO = (editedItem["DateLancement"].Controls[0] as TextBox).Text;
string pID_Affectation = (editedItem["ID_Affectation"].FindControl("RadCombobox1") as RadComboBox).SelectedValue;
try
{
SqlDSListeOF.UpdateParameters["pID_OF"].DefaultValue = pID_OF;
SqlDSListeOF.UpdateParameters["pNO_WO"].DefaultValue = pNO_WO;
SqlDSListeOF.UpdateParameters["pRef"].DefaultValue = pRef;
SqlDSListeOF.UpdateParameters["pQte"].DefaultValue = pQte;
SqlDSListeOF.UpdateParameters["pStatut_WO"].DefaultValue = pStatut_WO;
SqlDSListeOF.UpdateParameters["pDate_WO"].DefaultValue = pDate_WO;
SqlDSListeOF.UpdateParameters["pID_Affectation"].DefaultValue = pID_Affectation;
SqlDSListeOF.Update();
}
catch (Exception ex)
{
e.Canceled = true;
ErrorAffectation.Text = "Impossible de mettre à jour . " + ex.Message;
}
}
Hi Axel.
We're glad to hear you're Interested in the Telerik Components. I will try to explain how this works, but first, please share the complete RadGrid markup and all of it's backend code. Since the Grid can be configured in many different ways, it is important that we understand the structure and how it was built. Based on that we can give you a more precise answer.
Thank you for your reply, here is my radgrid and my backend.
ASPX :
<telerik:RadGrid ID="RadGrid1" runat="server" AllowFilteringByColumn="True" AllowPaging="True" AllowSorting="True" DataSourceID="SqlDSListeOF" CellSpacing="-1" GridLines="Both" Skin="Bootstrap" Width="1156px" OnDetailTableDataBind ="RadGrid1_DetailTableDataBind1" OnUpdateCommand="RadGrid1_UpdateCommand" OnNeedDataSource="RadGrid1_NeedDataSource" Height="119px" style="margin-top: 29px; margin-left: 26px;" AutoGenerateEditColumn="True" Font-Size="Medium"> <GroupingSettings CollapseAllTooltip="Collapse all groups"></GroupingSettings> <MasterTableView DataSourceID="SqlDSListeOF" AutoGenerateColumns="False" DataKeyNames="ID_OF" BackColor="Transparent" GridLines="Horizontal" Width="" Font-Size="Smaller" NoDetailRecordsText="Aucun enregistrement à afficher" NoMasterRecordsText="Aucun enregistrement à afficher"> <DetailTables> <telerik:GridTableView runat="server" AutoGenerateEditColumn="false" DataKeyNames="ID_OF,Composant" DataSourceID="SqlDSComposant" AllowFilteringByColumn="False" AutoGenerateColumns="false" BorderStyle="Solid" > <Columns> <telerik:GridBoundColumn DataField="ID_OF" FilterControlAltText="Filter ID_OF column" HeaderText="ID_OF" SortExpression="ID_OF" UniqueName="ID_OF" ReadOnly="true"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Composant" FilterControlAltText="Filter Composant column" HeaderText="Composant" SortExpression="Composant" UniqueName="Composant" ReadOnly="true"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="RefDescription" FilterControlAltText="Filter RefDescription column" HeaderText="RefDescription" SortExpression="RefDescription" UniqueName="RefDescription" ReadOnly="true" Display="false"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="AcheteurPlanificateur" FilterControlAltText="Filter AcheteurPlanificateur column" HeaderText="AcheteurPlanificateur" SortExpression="AcheteurPlanificateur" UniqueName="AcheteurPlanificateur" ReadOnly="true" Display="false"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="QteDemandee" FilterControlAltText="Filter QteDemandee column" HeaderText="QteDemandee" SortExpression="QteDemandee" UniqueName="QteDemandee" DataFormatString="{0:N4}" ReadOnly="true"> <ItemStyle HorizontalAlign="Right" /> </telerik:GridBoundColumn> <telerik:GridTemplateColumn DataField="Machine" FilterControlAltText="Filter Machine column" HeaderText="Machine" SortExpression="Machine" UniqueName="Machine" ReadOnly ="true" > <ItemStyle HorizontalAlign="Center" /> <ItemTemplate> <asp:Label ID="Nom" runat="server" Text='<%# Eval("Nom") %>'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn DataField="Description" FilterControlAltText="Filter Description column" HeaderText="Description Machine" SortExpression="Description" UniqueName="Description" ReadOnly ="true" > <ItemStyle HorizontalAlign="Center" /> <ItemTemplate> <asp:Label ID="Description" runat="server" Text='<%# Eval("Description") %>'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> <HeaderStyle Font-Bold="True" Font-Overline="False" HorizontalAlign="Center" BorderStyle="Solid" /> </telerik:GridTableView> </DetailTables> <Columns> <telerik:GridTemplateColumn UniqueName="CheckBoxTemplateColumn" HeaderStyle-Width="5px"> <ItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="ToggleRowSelection" AutoPostBack="True" /> </ItemTemplate> <HeaderTemplate> <asp:CheckBox ID="headerChkbox" runat="server" OnCheckedChanged="ToggleSelectedState" Width="20px" AutoPostBack="true" /> </HeaderTemplate> <ItemStyle HorizontalAlign="Center"/> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="ID_OF" FilterControlAltText="Filter ID_OF column" HeaderText="ID_OF" SortExpression="ID_OF" UniqueName="ID_OF" ReadOnly="true"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="NO_OF" FilterControlAltText="Filter NO_OF column" HeaderText="NO_OF" SortExpression="NO_OF" UniqueName="NO_OF" ReadOnly="true"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CodeArticle" FilterControlAltText="Filter CodeArticle column" HeaderText="CodeArticle" SortExpression="CodeArticle" UniqueName="CodeArticle" ReadOnly="true"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="StatutOF" FilterControlAltText="Filter StatutOF column" HeaderText="StatutOF" SortExpression="StatutOF" UniqueName="StatutOF" ReadOnly="true"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="QteLancee" DataType="System.Double" FilterControlAltText="Filter QteLancee column" HeaderText="QteLancee" SortExpression="QteLancee" UniqueName="QteLancee" ReadOnly="true" > <ItemStyle HorizontalAlign="Right" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="AcheteurPlanificateur" FilterControlAltText="Filter AcheteurPlanificateur column" HeaderText="AcheteurPlanificateur" SortExpression="AcheteurPlanificateur" UniqueName="AcheteurPlanificateur" ReadOnly="true"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Base_MFG" FilterControlAltText="Filter Base_MFG column" HeaderText="Base_MFG" SortExpression="Base_MFG" UniqueName="Base_MFG" ReadOnly="true" Display="false"> <ItemStyle HorizontalAlign="Center" Width="5px" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="DateLancement" DataFormatString="{0:dd / MM / yyyy}" DataType="System.DateTime" FilterControlAltText="Filter DateLancement column" HeaderText="DateLancement" SortExpression="DateLancement" UniqueName="DateLancement" ReadOnly="true"> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridTemplateColumn DataField="ID_Affectation" FilterControlAltText="Filter ID_Affectation column" HeaderText="ID_Affectation" SortExpression="ID_Affectation" UniqueName="ID_Affectation" ReadOnly="false"> <EditItemTemplate> <telerik:RadComboBox runat="server" ID="RadComboBox1" EnableLoadOnDemand="False" DataTextField="Affectation" DataValueField="ID_Affectation" Height="140px" Width="220px" DropDownWidth="420px" DataSourceID="SqlDSAffectation" SelectedValue='<%# Bind("ID_Affectation") %> '> </telerik:RadComboBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="AffectationLabel" runat="server" Text='<%# Eval("Affectation") %>'></asp:Label> </ItemTemplate> <ItemStyle HorizontalAlign="Center" /> </telerik:GridTemplateColumn> </Columns> <EditItemStyle BackColor="#00C000" Font-Bold="True" /> <HeaderStyle BackColor="Transparent" Font-Bold="True" HorizontalAlign="Center" Width="10px" /> </MasterTableView> </telerik:RadGrid>
BACKEND :
protected void RadGrid1_DetailTableDataBind1(object sender, GridDetailTableDataBindEventArgs e) { GridDataItem parentItem = e.DetailTableView.ParentItem as GridDataItem; if (parentItem.Edit) { return; } SqlDSComposant.SelectParameters["pID_OF"].DefaultValue = parentItem.GetDataKeyValue("ID_OF").ToString(); } protected void ToggleRowSelection(object sender, EventArgs e) { ((sender as CheckBox).NamingContainer as GridItem).Selected = (sender as CheckBox).Checked; bool checkHeader = true; foreach (GridDataItem dataItem in RadGrid1.MasterTableView.Items) { if (!(dataItem.FindControl("CheckBox1") as CheckBox).Checked) { checkHeader = false; break; } } GridHeaderItem headerItem = RadGrid1.MasterTableView.GetItems(GridItemType.Header)[0] as GridHeaderItem; (headerItem.FindControl("headerChkbox") as CheckBox).Checked = checkHeader; } protected void ToggleSelectedState(object sender, EventArgs e) { CheckBox headerCheckBox = (sender as CheckBox); foreach (GridDataItem dataItem in RadGrid1.MasterTableView.Items) { (dataItem.FindControl("CheckBox1") as CheckBox).Checked = headerCheckBox.Checked; dataItem.Selected = headerCheckBox.Checked; } } protected void ChoixStatutOF_SelectedIndexChanged(object sender, EventArgs e) { SqlDSListeOF.SelectParameters["pStatutOF"].DefaultValue = ChoixStatutOF.SelectedValue; } protected void RadGrid1_UpdateCommand(object source, Telerik.Web.UI.GridCommandEventArgs e) { GridEditableItem editedItem = e.Item as GridEditableItem; // Obtenir la valeur de la clé primaire grâce à DataKeyValue string pID_OF = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["ID_OF"].ToString(); // Accédez à la zone de texte à partir du formulaire d'édition et stockez les valeurs dans des variables de chaîne. string pNO_WO = (editedItem["NO_OF"].Controls[0] as TextBox).Text; string pRef = (editedItem["CodeArticle"].Controls[0] as TextBox).Text; string pQte = (editedItem["QteLancee"].Controls[0] as TextBox).Text; string pStatut_WO = (editedItem["StatutOF"].Controls[0] as TextBox).Text; string pDate_WO = (editedItem["DateLancement"].Controls[0] as TextBox).Text; string pID_Affectation = (editedItem["ID_Affectation"].FindControl("RadCombobox1") as RadComboBox).SelectedValue; string day = pDate_WO.Substring(0, 2); string month = pDate_WO.Substring(5, 2); string year = pDate_WO.Substring(10, 4); pDate_WO = (year + "-" + month + "-" + day); try { SqlDSListeOF.UpdateParameters["pID_OF"].DefaultValue = pID_OF; SqlDSListeOF.UpdateParameters["pNO_WO"].DefaultValue = pNO_WO; SqlDSListeOF.UpdateParameters["pRef"].DefaultValue = pRef; SqlDSListeOF.UpdateParameters["pQte"].DefaultValue = pQte; SqlDSListeOF.UpdateParameters["pStatut_WO"].DefaultValue = pStatut_WO; SqlDSListeOF.UpdateParameters["pDate_WO"].DefaultValue = pDate_WO; SqlDSListeOF.UpdateParameters["pID_Affectation"].DefaultValue = pID_Affectation; SqlDSListeOF.Update(); } catch (Exception ex) { e.Canceled = true; ErrorAffectation.Text = "Impossible de mettre à jour . " + ex.Message; } GridDataItem dataItem = e.Item as GridDataItem; string pID_WO = (dataItem.OwnerTableView.DetailTables as TextBox).text; string pRefComposant = dataItem["Composant"].DetailTables.ToString(); string pMachine = dataItem["Machine"].ToString(); string pRefDescription = dataItem["RefDescription"].ToString(); string pAcheteurPlanificateur = dataItem["AcheteurPlanificateur"].ToString(); string pQteOr = dataItem["QteDemandee"].ToString(); try { SqlDSComposant.UpdateParameters["pID_WO"].DefaultValue = pID_WO; SqlDSComposant.UpdateParameters["pMachine"].DefaultValue = pMachine; SqlDSComposant.UpdateParameters["pRefComposant"].DefaultValue = pRefComposant; SqlDSComposant.UpdateParameters["pQteDemandee"].DefaultValue = pQteOr; SqlDSComposant.UpdateParameters["pRefDescription"].DefaultValue = pRefDescription; SqlDSComposant.UpdateParameters["pAcheteurPlanificateur"].DefaultValue = pAcheteurPlanificateur; SqlDSComposant.Update(); } catch (Exception ex) { e.Canceled = true; ErrorAffectation.Text = "Impossible de mettre à jour . " + ex.Message; } } protected void AffectationChecked_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e) { } protected void RadButton1_Click(object sender, EventArgs e) { string Affectation = AffectationChecked.SelectedValue; if (string.IsNullOrEmpty(AffectationChecked.Text)) { ErrorAffectationMAJ.Text = "Veuillez sélectionner une affectation . "; } else { foreach (GridDataItem dataItem in RadGrid1.Items) { CheckBox chk = (CheckBox)dataItem.FindControl("CheckBox1"); if (chk.Enabled) { if (chk.Checked == true) { string pID_OF = dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex]["ID_OF"].ToString(); // Accédez à la zone de texte à partir du formulaire d'édition et stockez les valeurs dans des variables de chaîne. string pNO_WO = (dataItem["NO_OF"].Text); string pRef = (dataItem["CodeArticle"].Text); string pQte = (dataItem["QteLancee"].Text); string pStatut_WO = (dataItem["StatutOF"].Text); string pDate_WO = (dataItem["DateLancement"].Text); string day = pDate_WO.Substring(0, 2); string month = pDate_WO.Substring(5, 2); string year = pDate_WO.Substring(10, 4); pDate_WO = (year + "-" + month + "-" + day); try { SqlDSListeOF.UpdateParameters["pID_OF"].DefaultValue = pID_OF; SqlDSListeOF.UpdateParameters["pNO_WO"].DefaultValue = pNO_WO; SqlDSListeOF.UpdateParameters["pRef"].DefaultValue = pRef; SqlDSListeOF.UpdateParameters["pQte"].DefaultValue = pQte; SqlDSListeOF.UpdateParameters["pStatut_WO"].DefaultValue = pStatut_WO; SqlDSListeOF.UpdateParameters["pDate_WO"].DefaultValue = pDate_WO; SqlDSListeOF.UpdateParameters["pID_Affectation"].DefaultValue = Affectation; SqlDSListeOF.Update(); } catch (Exception ex) { ErrorAffectationChecked.Text = "Impossible de mettre à jour . " + ex.Message; } } } RadGrid1.Rebind(); } }