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