Dear technology architects:
I need an expert voice to resolve my problem.
I have a RadGrid with AutoGeneratedColumns = "False", but I add programatically the columns. There are BoundColumns and GridDropDownColumn.
The GridDropDownColumns are generated dynamically because I don't know how many columns will come from the grid datasource. Then I have the following code in the Page_Load:
int ContCatalogos = 0;RadGridSabana.MasterTableView.Columns.Clear();foreach (DataColumn dataColumn in dtSabana.Columns){ ContCatalogos++; switch (ContCatalogos) { case 1: dsCatalogos1.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos1.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 2: dsCatalogos2.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos2.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 3: dsCatalogos3.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos3.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 4: dsCatalogos4.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos4.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 5: dsCatalogos5.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos5.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 6: dsCatalogos6.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos6.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 7: dsCatalogos7.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos7.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 8: dsCatalogos8.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos8.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 9: dsCatalogos9.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos9.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 10: dsCatalogos10.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos10.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 11: dsCatalogos11.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos11.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 12: dsCatalogos12.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos12.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 13: dsCatalogos13.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos13.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 14: dsCatalogos14.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos14.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; case 15: dsCatalogos15.SelectParameters[0].DefaultValue = "1"; //Empresa dsCatalogos15.SelectParameters[1].DefaultValue = dataColumn.ColumnName; //Catalogo break; } GridDropDownColumn dropdownColumn = new GridDropDownColumn(); this.RadGridSabana.MasterTableView.Columns.Add(dropdownColumn); dropdownColumn.DataField = dataColumn.ColumnName; //Una columna del DataSource del grid. dropdownColumn.ListValueField = dataColumn.ColumnName; //La columna de la funcion que trae los valores para llenar el combo. Esta columna debe tener los mismos valores que Datafield para que se relacione. dropdownColumn.DataSourceID = "dsCatalogos" + ContCatalogos.ToString(); //El nombre del DataSource dropdownColumn.ListTextField = dataColumn.ColumnName; //Es la columna del datasource del Combo que contiene el nombre a desplegar //dropdownColumn.UniqueName = dataColumn.ColumnName; dropdownColumn.HeaderText = dataColumn.ColumnName; }I have to create an independent ObjectDataSource for each GridDropDownColumn. If I don't know how many columns could be retrieved I have to create more than 15 ObjectDataSourcse manually in the code.
If the grid datasource contains more than 15 columns, I have a problem...
Following the code in the ASPX
<asp:ObjectDataSource ID="dsCatalogos1" runat="server" TypeName="BusinessLayer.Funciones" SelectMethod="ConsultarItemsCatalogo" OldValuesParameterFormatString="original_{0}" > <SelectParameters> <asp:ControlParameter ControlID="RadGridSabana" Name="Empresa" PropertyName="SelectedValue" Type="Int32" /> <asp:ControlParameter ControlID="RadGridSabana" Name="NombreCatalogo" PropertyName="SelectedValue" Type="String" /> </SelectParameters></asp:ObjectDataSource><asp:ObjectDataSource ID="dsCatalogos2" runat="server" TypeName="BusinessLayer.Funciones" SelectMethod="ConsultarItemsCatalogo" OldValuesParameterFormatString="original_{0}" > <SelectParameters> <asp:ControlParameter ControlID="RadGridSabana" Name="Empresa" PropertyName="SelectedValue" Type="Int32" /> <asp:ControlParameter ControlID="RadGridSabana" Name="NombreCatalogo" PropertyName="SelectedValue" Type="String" /> </SelectParameters></asp:ObjectDataSource><asp:ObjectDataSource ID="dsCatalogos3" runat="server" TypeName="BusinessLayer.Funciones" SelectMethod="ConsultarItemsCatalogo" OldValuesParameterFormatString="original_{0}" > <SelectParameters> <asp:ControlParameter ControlID="RadGridSabana" Name="Empresa" PropertyName="SelectedValue" Type="Int32" /> <asp:ControlParameter ControlID="RadGridSabana" Name="NombreCatalogo" PropertyName="SelectedValue" Type="String" /> </SelectParameters></asp:ObjectDataSource><asp:ObjectDataSource ID="dsCatalogos4" runat="server" TypeName="BusinessLayer.Funciones" SelectMethod="ConsultarItemsCatalogo" OldValuesParameterFormatString="original_{0}" > <SelectParameters> <asp:ControlParameter ControlID="RadGridSabana" Name="Empresa" PropertyName="SelectedValue" Type="Int32" /> <asp:ControlParameter ControlID="RadGridSabana" Name="NombreCatalogo" PropertyName="SelectedValue" Type="String" /> </SelectParameters></asp:ObjectDataSource><asp:ObjectDataSource ID="dsCatalogos5" runat="server" TypeName="BusinessLayer.Funciones" SelectMethod="ConsultarItemsCatalogo" OldValuesParameterFormatString="original_{0}" > <SelectParameters> <asp:ControlParameter ControlID="RadGridSabana" Name="Empresa" PropertyName="SelectedValue" Type="Int32" /> <asp:ControlParameter ControlID="RadGridSabana" Name="NombreCatalogo" PropertyName="SelectedValue" Type="String" /> </SelectParameters></asp:ObjectDataSource><asp:ObjectDataSource ID="dsCatalogos6" runat="server" TypeName="BusinessLayer.Funciones" SelectMethod="ConsultarItemsCatalogo" OldValuesParameterFormatString="original_{0}" > <SelectParameters> <asp:ControlParameter ControlID="RadGridSabana" Name="Empresa" PropertyName="SelectedValue" Type="Int32" /> <asp:ControlParameter ControlID="RadGridSabana" Name="NombreCatalogo" PropertyName="SelectedValue" Type="String" /> </SelectParameters></asp:ObjectDataSource>the DataSources are equal each other, the unique difference is the ID. They call to the same function that receives the same parameters but with different values.
If you take a look in the code behind, I have to insert a switch instruction to give them the parameter values.
My question is:
Is there a way to do the same thing creating the ObjectDataSources dynamically and assign them to theGridDropDownColumns in the code behind?
It could be more elegant and more efficient.
Please help me with this problem.
Thanks