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

RadGrid with dynamical and programatic creation of GridDropDownColumns and ObjectDataSources

1 Answer 76 Views
Grid
This is a migrated thread and some comments may be shown as answers.
juansimon
Top achievements
Rank 1
juansimon asked on 20 Mar 2012, 08:08 PM

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






1 Answer, 1 is accepted

Sort by
0
Antonio Stoilkov
Telerik team
answered on 26 Mar 2012, 06:42 AM
Hello Juan,

You could achieve your scenario by following the provided code for creating ObjectDataSource programmatically and then accessing it by calling FindControl with the needed id and setting the SelectParameters default values.
ObjectDataSource dataSource = FindControl(string.Format("dsCatalogos{0}", ContCatalogos)) as ObjectDataSource;
dataSource.SelectParameters[0].DefaultValue = "1";   //Empresa
dataSource.SelectParameters[1].DefaultValue = dataColumn.ColumnName;   //Catalogo
 
ObjectDataSource objectDataSource = new ObjectDataSource();
objectDataSource.TypeName = "BusinessLayer.Functiones";
objectDataSource.SelectMethod = "ConsultarItemsCatalogo";
objectDataSource.OldValuesParameterFormatString = "original_{0}";
objectDataSource.SelectParameters.Add(new ControlParameter()
{
    ControlID = "RadGridSabana",
    Name = "Empresa",
    PropertyName = "SelectedValue",
    Type = TypeCode.Int32
});
objectDataSource.SelectParameters.Add(new ControlParameter()
{
    ControlID = "RadGridSabana",
    Name = "NombreCatalogo",
    PropertyName = "SelectedValue",
    Type = TypeCode.String
});

Greetings,
Antonio Stoilkov
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
Tags
Grid
Asked by
juansimon
Top achievements
Rank 1
Answers by
Antonio Stoilkov
Telerik team
Share this question
or