01.
protected
void
RDDL_Statut_Load(
object
sender, EventArgs e)
02.
{
03.
DC_FiltragesDataContext Mydb =
new
DC_FiltragesDataContext();
04.
var results = (from U
in
Mydb.PLOP
05.
select
new
{ statut = U.STATUT}).Distinct();
06.
07.
RDDL_Statut.DataSource = results;
08.
RDDL_Statut.DataTextField =
"statut"
;
09.
RDDL_Statut.DataValueField =
"statut"
;
10.
11.
RDDL_Statut.DataBind();
12.
RDDL_Statut.Items.Insert(0,
new
DropDownListItem(
"--ALL STATUT--", "
ALL"));
13.
14.
}
Hi, I have an issue with my drop down list.
Lets say that i have a DropDownList Displaying : A, B ,C , D etc. And I need a default item.
Using this code , my data is not correctly bound.
The display of the DrowDownList Is the one i expected . But my "RDDL_Statut.SelectedItem.Value.ToString()" Is returning the Next Index.
When A is clicked I get B value.
6 Answers, 1 is accepted
Which event handler do you access the SelectedItem.Value property in? If you want to get the selected item's value I would suggest subscribing to the SelectedIndexChanged event and in its handler you can use the arguments to get it: e.Value.
Regards,
Ivan Danchev
Telerik
Hi,
I'm using the SelectedIndexChanged with my
protected
void
RDDL_Phase_ItemSelected(
object
sender, DropDownListEventArgs e)
{ RG_ProduitEC.Rebind(); }
to rebind my RadGrid.
On Selecting of my LinqDataSource I Check All my Dropdownlist With
if
(RDDL_Statut.SelectedItem !=
null
&& RDDL_Statut.SelectedItem.Value.ToString() !=
"ALL"
)
{
results=results.Where(s => s.XXX.Equals(RDDL_Statut.SelectedItem.Value.ToString() )) ;
}
The provided information is not enough for us to be able to determine what causes the behavior you have experienced. I would suggest isolating the DropDownList in a sample runnable project, which reproduces the issue, open a support ticket and attach it for further review. Here are our guidelines, which describe the correct approach for isolating an issue.
Regards,
Ivan Danchev
Telerik
Hi,
Let me help you reproduce this behavior.
First in the aspx :
<
telerik:RadDropDownList
ID
=
"RDDL_Phase"
runat
=
"server"
Skin
=
"Vista"
DataTextField
=
"text"
DataValueField
=
"value"
OnLoad
=
"RDDL_Phase_Load"
OnSelectedIndexChanged
=
"RDDL_Phase_SelectedIndexChanged"
AutoPostBack
=
"true"
>
</
telerik:RadDropDownList
>
<
h2
><
telerik:RadLabel
runat
=
"server"
ID
=
"Yeah"
Text
=
"HERE IS MA VALUE"
></
telerik:RadLabel
></
h2
>
Then in the code behind:
01.
public
DataTable Get_RDDL_lorenipsum()
02.
{
03.
DataTable data =
new
DataTable();
04.
data.Columns.Add(
"ID"
); data.Columns.Add(
"Name"
);
05.
06.
List<
string
> Value =
new
List<
string
>() {
"AA"
,
"BB"
,
"CC"
,
"DD"
,
"EE"
,
"FF"
,
"GG"
,
"HH"
,
"II"
,
"JJ"
};
07.
foreach
(var item
in
Value)
08.
{
09.
data.Rows.Add(item, item);
10.
}
11.
return
data;
12.
}
13.
14.
protected
void
RDDL_Phase_Load(
object
sender, EventArgs e)
15.
{
16.
RDDL_Phase.DataSource =
this
.Get_RDDL_lorenipsum();
17.
RDDL_Phase.DataTextField =
"Name"
;
18.
RDDL_Phase.DataValueField =
"ID"
;
19.
RDDL_Phase.DataBind();
20.
RDDL_Phase.Items.Insert(0,
new
DropDownListItem(
"--GOO GOO GOO--"
,
"ALL"
));
21.
}
22.
protected
void
RDDL_Phase_SelectedIndexChanged(
object
sender, DropDownListEventArgs e)
23.
{
24.
this
.Yeah.Text = e.Value;
25.
}
Voila !
Btw, i never had so mutch issue posting on a forum .. The backspace refresh and the blockcode Eternal trap re fun to see.
But the ordering of a datatable is based on the sorting..
So the only way to workaround is to a dummy column in the datatable n filter on it.
this is a lot of work around when Dropdown list . Items .insert should have done it.
If there is any other solution please let me know. For now the Drop Down list have been removed.
Thank you for posting a sample runnable page.
After analyzing the code we can say that the issue is caused by rebinding the DropDownList on every postback in the RDDL_Phase_Load handler. What happens is the following:
- after a selection is made, the control initiates a postback sending the info about the SelectedIndex to the server, so for example if you select CC the SelectedIndex is 3.
- on the server the RDDL_Phase_Load handler is reached and you rebind the control which means after you call RDDL_Phase.DataBind(); the control contains one item less (the previously added --GOO GOO GOO-- item at this point does not exist in the items collection) so now the index 3 points at a different item (DD).
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!IsPostBack)
{
RDDL_Phase.DataSource = Get_RDDL_lorenipsum();
RDDL_Phase.DataTextField =
"Name"
;
RDDL_Phase.DataValueField =
"ID"
;
RDDL_Phase.DataBind();
RDDL_Phase.Items.Insert(0,
new
DropDownListItem(
"--GOO GOO GOO--"
,
"ALL"
));
}
}
is not an option and you must use the control's OnLoad event and rebind it on every postback, I would suggest adding logic to the RDDL_Phase_Load handler for correcting the SelectedIndex when an item is added, for example:
protected
void
RDDL_Phase_Load(
object
sender, EventArgs e)
{
RDDL_Phase.DataSource =
this
.Get_RDDL_lorenipsum();
RDDL_Phase.DataTextField =
"Name"
;
RDDL_Phase.DataValueField =
"ID"
;
RDDL_Phase.DataBind();
RDDL_Phase.Items.Insert(0,
new
DropDownListItem(
"--GOO GOO GOO--"
,
"ALL"
));
RDDL_Phase.SelectedIndex = RDDL_Phase.SelectedIndex - 1;
}
Regards,
Ivan Danchev
Telerik by Progress