The situation is quite complex.
I have a repeater that show multiple groups of parameters in a grid. So in each repeater item I have a radGrid with the relative parameters.
A user can go in edit mode in the grid and he'll see a dinamically created combobox. In database I have a SQL query string for each parameter to load a different set of data in combobox. To achieve this I've done this:
- in edittemplate I put the combobox and a hiddenfield bound to database query string (used to load values in combobox)
- outside repeater I've another hiddenfield used by combobox (placed in repeater edit item) datasource
The idea is that when a user click and goes into edit for one row the hiddenfield's grid value (that inside repeater), the value is repeated into the hiddenfield external to the repeater. So the combobox will be correctly loaded as we want.
I have to mantain syncronized the two hiddenfield (inside and outside repeater). The problem is I have to use the ItemCommand Event (Edit Command) and cannot attach to the item databound event that comes after the combobox load. How can I find the value of hiddenfield inside repeater at itemcommand?
There are other smarter solution? I've tryed to place the combobox's datasource inside repeater edittemplate but received an error.
I post here an image of the web application and the page aspx and source code for details:
I have a repeater that show multiple groups of parameters in a grid. So in each repeater item I have a radGrid with the relative parameters.
A user can go in edit mode in the grid and he'll see a dinamically created combobox. In database I have a SQL query string for each parameter to load a different set of data in combobox. To achieve this I've done this:
- in edittemplate I put the combobox and a hiddenfield bound to database query string (used to load values in combobox)
- outside repeater I've another hiddenfield used by combobox (placed in repeater edit item) datasource
The idea is that when a user click and goes into edit for one row the hiddenfield's grid value (that inside repeater), the value is repeated into the hiddenfield external to the repeater. So the combobox will be correctly loaded as we want.
I have to mantain syncronized the two hiddenfield (inside and outside repeater). The problem is I have to use the ItemCommand Event (Edit Command) and cannot attach to the item databound event that comes after the combobox load. How can I find the value of hiddenfield inside repeater at itemcommand?
There are other smarter solution? I've tryed to place the combobox's datasource inside repeater edittemplate but received an error.
I post here an image of the web application and the page aspx and source code for details:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using Telerik.Web.UI; using MachinaWeb.Services; using MachinaWeb.CommonClasses; public partial class Configuration_Companies : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { HiddenFieldIdCultura.Value = ((SessionInformation)Session["sessionData"]).IdCultura.ToString(); HiddenFieldIdAzienda.Value = ((SessionInformation)Session["sessionData"]).IdAzienda.ToString(); BO_Azienda bo_azienda = new BO_Azienda(((SessionInformation)Session["sessionData"]).IdAzienda); LabelNomeAzienda.Text = bo_azienda.NomeAzienda; LabelIntestazioneAzienda.Text = bo_azienda.Intestazione; } protected void Repeater1_PreRender(object sender, EventArgs e) { foreach (RepeaterItem item in Repeater1.Items) { //Dinamically generate DataSource and associate it to Repeater Item ObjectDataSource ods = new ObjectDataSource(); ods.TypeName = "MachinaWeb.Services.BO_ConfigurazioneProgramma_Parametro"; ods.SelectMethod = "getAll"; ods.UpdateMethod = "updateParametro"; ods.SelectParameters.Add("_idCultura", DbType.Int64, HiddenFieldIdCultura.Value); ods.SelectParameters.Add("_idAzienda", DbType.Int64, HiddenFieldIdAzienda.Value); ods.SelectParameters.Add("_idGruppoParametro", DbType.Int64, ((HiddenField)item.FindControl("HiddenFieldIdGruppo")).Value); RadGrid radGrid = (RadGrid)item.FindControl("RadGridParametriConfigurazione"); radGrid.DataSource = ods; radGrid.DataBind(); } } protected void RadGridParametriConfigurazione_UpdateCommand(object sender, GridCommandEventArgs e) { ObjectDataSourceForUpdate.SelectParameters["_idCultura"].DefaultValue = HiddenFieldIdCultura.Value; ObjectDataSourceForUpdate.SelectParameters["_idAzienda"].DefaultValue = HiddenFieldIdAzienda.Value; ObjectDataSourceForUpdate.SelectParameters["_idGruppoParametro"].DefaultValue = ((Label)e.Item.FindControl("LabelTipoParametro")).Text; ((RadGrid)sender).DataSource = ObjectDataSourceForUpdate; } protected void RadGridParametriConfigurazione_ItemDataBound(object source, GridItemEventArgs e) { if (!(e.Item is GridDataInsertItem) && e.Item.IsInEditMode) //item is about to be edit { long tipoParametro = long.Parse(((HiddenField)e.Item.FindControl("HiddenFieldTipoControllo")).Value); //HiddenFieldQuery.Value = ((HiddenField)e.Item.FindControl("HiddenFieldQueryRiga")).Value; try { switch (tipoParametro) { case 1: //CheckBox ((RadComboBox)e.Item.FindControl("RadComboBoxValore")).Visible = false; ((TextBox)e.Item.FindControl("TextBoxDescrizione")).Visible = false; ((CheckBox)e.Item.FindControl("CheckBoxAbilitatoE")).Visible = true; break; case 2: //CheckBox-ComboBox ((RadComboBox)e.Item.FindControl("RadComboBoxValore")).Visible = true; ((TextBox)e.Item.FindControl("TextBoxDescrizione")).Visible = false; ((CheckBox)e.Item.FindControl("CheckBoxAbilitatoE")).Visible = true; break; case 3: //TextBox ((RadComboBox)e.Item.FindControl("RadComboBoxValore")).Visible = false; ((TextBox)e.Item.FindControl("TextBoxDescrizione")).Visible = true; ((CheckBox)e.Item.FindControl("CheckBoxAbilitatoE")).Visible = false; break; case 4: //ComboBox ((RadComboBox)e.Item.FindControl("RadComboBoxValore")).Visible = true; ((TextBox)e.Item.FindControl("TextBoxDescrizione")).Visible = false; ((CheckBox)e.Item.FindControl("CheckBoxAbilitatoE")).Visible = false; break; case 5: //CheckBox-TextBox ((RadComboBox)e.Item.FindControl("RadComboBoxValore")).Visible = false; ((TextBox)e.Item.FindControl("TextBoxDescrizione")).Visible = true; ((CheckBox)e.Item.FindControl("CheckBoxAbilitatoE")).Visible = true; break; } } catch (NullReferenceException) { } } } protected void HiddenFieldQueryRiga_ValueChanged(object sender, EventArgs e) { } } <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Aziende.aspx.cs" Inherits="Configuration_Companies" %> <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderBody" runat="Server"> <asp:Label ID="LabelIntestazione" runat="server" Text="LabelIntestazione" Font-Names="Arial" Font-Size="13px" Font-Bold="True"></asp:Label> <table style="font-family: Arial; font-size: 13px; margin-top: 10px;"> <tr> <td colspan="2"> <b> <asp:Label ID="LabelIntestazioniDatiAzienda" runat="server" Text="Label"></asp:Label> </b> </td> </tr> <tr> <td> <asp:Label ID="LabelNomeAziendaTxt" runat="server" Text="LabelNomeAzienda"></asp:Label> </td> <td> <asp:Label ID="LabelNomeAzienda" runat="server" Text="Label"></asp:Label> </td> </tr> <tr> <td> <asp:Label ID="LabelIntestazioneAziendaTxt" runat="server" Text="Label"></asp:Label> </td> <td> <asp:Label ID="LabelIntestazioneAzienda" runat="server" Text="Label"></asp:Label> </td> </tr> </table> <br /> <table width="100%;"> <tr> <td> <div style="width: 7cm;"> </div> </td> <td style="text-align: right;"> <asp:Label ID="LabelGruppo" runat="server" Text="Label" Font-Names="Arial" Font-Size="11pt"></asp:Label> <telerik:RadComboBox ID="RadComboBoxGruppo" runat="server" DataSourceID="ObjectDataSourceGruppiParametriComboBox" DataTextField="NomeGruppo" DataValueField="IdGruppo" AutoPostBack="True" AppendDataBoundItems="True" Width="300px"> <Items> <telerik:RadComboBoxItem runat="server" Text="---" Value="-1" /> </Items> </telerik:RadComboBox> <asp:ObjectDataSource ID="ObjectDataSourceGruppiParametriComboBox" runat="server" SelectMethod="getAll" TypeName="MachinaWeb.Services.BO_ConfigurazioneProgramma_GruppoParametri"> <SelectParameters> <asp:ControlParameter ControlID="HiddenFieldIdCultura" Name="_idCultura" PropertyName="Value" Type="Int64" /> </SelectParameters> </asp:ObjectDataSource> </td> </tr> </table> <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSourceGruppiParametri" OnPreRender="Repeater1_PreRender"> <HeaderTemplate> </HeaderTemplate> <FooterTemplate> </FooterTemplate> <ItemTemplate> <div id="IntestazioneGruppo" style="background-color: Orange; border: 1px solid black; text-align: center; margin-bottom: 11px;"> <%# Eval("NomeGruppo") %> </div> </b> <telerik:RadGrid ID="RadGridParametriConfigurazione" runat="server" EnableEmbeddedSkins="False" GridLines="None" Skin="MachinaWeb" AllowPaging="true" PageSize="15" AllowAutomaticUpdates="True" EnableAjaxSkinRendering="False" OnItemDataBound="RadGridParametriConfigurazione_ItemDataBound" OnUpdateCommand="RadGridParametriConfigurazione_UpdateCommand"> <MasterTableView AutoGenerateColumns="False" EditMode="InPlace" DataKeyNames="IdParametro"> <RowIndicatorColumn> <HeaderStyle Width="20px"></HeaderStyle> </RowIndicatorColumn> <ExpandCollapseColumn> <HeaderStyle Width="20px"></HeaderStyle> </ExpandCollapseColumn> <Columns> <telerik:GridTemplateColumn Visible="false"> <EditItemTemplate> <asp:Label ID="LabelTipoParametro" runat="server" Text='<%# Bind("IdTipoParametro") %>'></asp:Label> <%--Used only for update datasource--%> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridEditCommandColumn ButtonType="ImageButton" CancelImageUrl="~/Images/ImagesGrid/Cancel.gif" EditImageUrl="~/Images/ImagesGrid/Edit.gif" UpdateImageUrl="~/Images/ImagesGrid/Update.gif" InsertImageUrl="~/Images/ImagesGrid/Update.gif" UniqueName="EditCommandColumn" ItemStyle-Width="40px" /> <telerik:GridBoundColumn DataField="IdParametro" DataType="System.Int64" HeaderText="IdParametro" SortExpression="IdParametro" UniqueName="IdParametro" ReadOnly="true" Visible="false"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="IdCultura" DataType="System.Int64" HeaderText="IdCultura" SortExpression="IdCultura" UniqueName="IdCultura" ReadOnly="true" Visible="false"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn Resizable="false" ItemStyle-Width="270px"> <HeaderTemplate> <asp:Label ID="LabelDescrizioneParametro" runat="server" Text="Parametro"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:Label ID="LabelDescrizioneParametroI" runat="server" Text='<%# Bind("DescrizioneParametro") %>' Width="270px"></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:Label ID="LabelDescrizioneParametroE" runat="server" Text='<%# Bind("DescrizioneParametro") %>' Width="270px"></asp:Label> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn Resizable="false" ItemStyle-Width="270px"> <HeaderTemplate> <asp:Label ID="LabelUnificata" runat="server" Text="Valore"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:Label ID="LabelDescrizioneI" runat="server" Text='<%# Bind("ValoreTextBoxComboBox") %> ' Width="270px"></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="TextBoxDescrizione" runat="server" Text='<%# Bind("DescrizioneTextBox") %>' Width="270px"></asp:TextBox> <telerik:RadComboBox ID="RadComboBoxValore" runat="server" Width="270px" DataSourceID="ObjectDataSourceRadComboBoxValore" DataTextField="Descrizione" DataValueField="Valore" SelectedValue='<%# Bind("ValoreComboBox") %>'> </telerik:RadComboBox> <asp:HiddenField ID="HiddenFieldQueryRiga" runat="server" Value='<%# Bind("QueryComboBox") %>' /> <asp:Label ID="LabelHidden1" runat="server" Text='<%# Bind("QueryComboBox") %>' /> <asp:HiddenField ID="HiddenFieldTipoControllo" runat="server" Value='<%# Bind("IdTipoParametro") %>' /> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn Resizable="false" ItemStyle-Width="30px"> <HeaderTemplate> <asp:Label ID="LabelAbilitato" runat="server" Text="Abilitato"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:CheckBox ID="CheckBoxAbilitatoI" runat="server" Checked='<%# Bind("Abilitato") %>' Enabled="false" Width="30px" /> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="CheckBoxAbilitatoE" runat="server" Checked='<%# Bind("Abilitato") %>' Width="30px" /> </EditItemTemplate> </telerik:GridTemplateColumn> </Columns> <EditFormSettings> <EditColumn> </EditColumn> </EditFormSettings> </MasterTableView> </telerik:RadGrid> <asp:HiddenField ID="HiddenFieldIdGruppo" runat="server" Value='<%# DataBinder.Eval(Container.DataItem,"IdGruppo")%>' /> </ItemTemplate> <SeparatorTemplate> <div style="margin-bottom: 20px;"> </div> </SeparatorTemplate> </asp:Repeater> <asp:ObjectDataSource ID="ObjectDataSourceGruppiParametri" runat="server" SelectMethod="getAll" TypeName="MachinaWeb.Services.BO_ConfigurazioneProgramma_GruppoParametri"> <SelectParameters> <asp:ControlParameter ControlID="HiddenFieldIdCultura" Name="_idCultura" PropertyName="Value" Type="Int64" /> <asp:ControlParameter ControlID="RadComboBoxGruppo" Name="_idGruppoSelezionato" PropertyName="SelectedValue" Type="Int64" /> </SelectParameters> </asp:ObjectDataSource> <%--Prova combo dinamico in repeater--%> <asp:ObjectDataSource ID="ObjectDataSourceRadComboBoxValore" runat="server" SelectMethod="valoriComboBox" TypeName="MachinaWeb.Services.BO_Query"> <SelectParameters> <asp:ControlParameter ControlID="HiddenFieldQuery" Name="_query" DbType="String" PropertyName="Value" /> <asp:ControlParameter ControlID="HiddenFieldIdCultura" Name="_idCultura" Type="Int64" PropertyName="Value" /> </SelectParameters> </asp:ObjectDataSource> <asp:HiddenField ID="HiddenFieldQuery" runat="server" /> <%--Prova combo dinamico in repeater--%> <asp:ObjectDataSource ID="ObjectDataSourceForUpdate" runat="server" SelectMethod="getAll" TypeName="MachinaWeb.Services.BO_ConfigurazioneProgramma_Parametro" UpdateMethod="updateParametro"> <SelectParameters> <asp:Parameter Name="_idGruppoParametro" Type="Int64" DefaultValue="" /> <asp:ControlParameter ControlID="HiddenFieldIdAzienda" Name="_idAzienda" PropertyName="Value" Type="Int64" /> <asp:ControlParameter ControlID="HiddenFieldIdCultura" Name="_idCultura" PropertyName="Value" Type="Int64" /> </SelectParameters> <UpdateParameters> <asp:ControlParameter ControlID="HiddenFieldIdAzienda" Name="_idAzienda" PropertyName="Value" Type="Int64" /> <asp:ControlParameter ControlID="HiddenFieldIdCultura" Name="_idCultura" PropertyName="Value" Type="Int64" /> <asp:Parameter Name="Abilitato" Type="Boolean" /> <asp:Parameter Name="IdTipoParametro" Type="Int64" /> <asp:Parameter Name="DescrizioneParametro" Type="String" /> <asp:Parameter Name="DescrizioneTextBox" Type="String" /> <asp:Parameter Name="ValoreComboBox" Type="String" /> <asp:Parameter Name="IdParametro" Type="Int64" /> </UpdateParameters> </asp:ObjectDataSource> <asp:HiddenField ID="HiddenFieldIdCultura" runat="server" /> <asp:HiddenField ID="HiddenFieldIdAzienda" runat="server" /> </asp:Content>