ok, ive had a few questions on this subject, i hope Im clearer this time.
I want to find the values from a number of dropdown controls inside a repeater control. I eventually want to build a multidimensional array, so I can loop through each item and add them to a database table.
<asp:Repeater ID="myRepeater" runat="server">
<ItemTemplate>
<asp:DropDownList ID="AdTitle" runat="server">
<asp:ListItem Selected="True" Value="" Text=""/>
<asp:ListItem Selected="False" Value="Miss" Text="Miss"/>
<asp:ListItem Selected="False" Value="Ms" Text="Ms"/>
<asp:ListItem Selected="False" Value="Mrs" Text="Mrs"/>
<asp:ListItem Selected="False" Value="Mr" Text="Mr"/>
<asp:ListItem Selected="False" Value="Other" Text="Other"/>
</asp:DropDownList>
<asp:TextBox ID="AdFullName" runat="server"></asp:TextBox>
</ItemTemplate>
<ItemTemplate>
<asp:DropDownList ID="AdTitle" runat="server">
<asp:ListItem Selected="True" Value="" Text=""/>
<asp:ListItem Selected="False" Value="Miss" Text="Miss"/>
<asp:ListItem Selected="False" Value="Ms" Text="Ms"/>
<asp:ListItem Selected="False" Value="Mrs" Text="Mrs"/>
<asp:ListItem Selected="False" Value="Mr" Text="Mr"/>
<asp:ListItem Selected="False" Value="Other" Text="Other"/>
</asp:DropDownList>
<asp:TextBox ID="AdFullName" runat="server"></asp:TextBox>
</ItemTemplate>
You would need to loop through the repeater items and get each value. Code sample below is in C#, but should be able to convert to VB.NET relatively easily.
foreach (RepeaterItem ri in myRepeater.Items)
{
switch (ri.ItemType)
{
case ListItemType.Item:
case ListItemType.AlternatingItem:
DropDownList AdTitle = (DropDownList) ri.FindControl("AdTitle");
TextBox AdFullName = (TextBox) ri.FindControl("AdFullName");
string selectedAdTitle = AdTitle.SelectedValue;
string enteredAdFullName = AdFullName.Text;
// Do something with values here
break;
}
}
Related
Here is the code of dropdown in actually from dropdown only item selected by default when we click on droppdown but I want 2 items to be selected from the dropdown.
<asp:DropDownList runat="server" ID="dd1" >
<asp:ListItem Text="Male"></asp:ListItem>
<asp:ListItem Text="Female" Value="2"></asp:ListItem>
<asp:ListItem Text="yes" Value="3"></asp:ListItem>
<asp:ListItem Text="no" Value="4"></asp:ListItem>
<asp:ListItem Text="hello" Value="5"></asp:ListItem>
</asp:DropDownList>
I have a datagrid that has dropdowns in one column :
<asp:TemplateColumn HeaderText="">
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<asp:Label runat="server" ID="lblResultId" Visible="false" text='<%# DataBinder.Eval(Container, "DataItem.CurrentId", "{0:g}") %>'/>
<asp:DropDownList ID="ddlCurrentValue" DataTextField="Description" DataValueField="Id" Runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlCurrentValue_OnSelectedIndexChanged">
<asp:ListItem Text="" Value="0" Selected="True"></asp:ListItem>
<asp:ListItem Text="1" Value="1">1</asp:ListItem>
<asp:ListItem Text="2" Value="2">2</asp:ListItem>
<asp:ListItem Text="3" Value="3">3</asp:ListItem>
<asp:ListItem Text="4" Value="4">4</asp:ListItem>
<asp:ListItem Text="5" Value="5">5</asp:ListItem>
<asp:ListItem Text="6" Value="6">6</asp:ListItem>
<asp:ListItem Text="7" Value="7">7</asp:ListItem>
<asp:ListItem Text="8" Value="8">8</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
I set the selected value for each dropdown based on a value taken from the database on ItemDataBound.
Now if the user changes the value of one of the dropdowns, i would like to save the value from that dropdown.
My id is that i have the database-id in lblResultId and use that to save the selectedvalue from the dropdown to the database via a linq query. However, i am already stuck on the 'onselectedindexchanged' for the dropdownlists not firing.....
Any suggestions how to procede or how to do this differently ?
In a gridview, to display data in view mode, I use a label.
In Edit mode I have a dropdownlist. So, How can I set text in that label as selected value for dropdownlist when gridview is in edit mode?
Here is my code in aspx page:
<Columns>
<asp:BoundField DataField="id" HeaderText="ID" ReadOnly="true" />
<asp:TemplateField HeaderText="Zone Name">
<HeaderStyle Width="220px"></HeaderStyle>
<ItemTemplate>
<asp:Label ID="lbDisplayName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlName" runat="server" CssClass="customddlZoneName">
<asp:ListItem Value="">--Select Zone Name--</asp:ListItem>
<asp:ListItem Value="Value1">Text 1</asp:ListItem>
<asp:ListItem Value="Value2">Text 2</asp:ListItem>
<asp:ListItem Value="Value3">Text 3</asp:ListItem>
<asp:ListItem Value="Value4">Text 4</asp:ListItem>
<asp:ListItem Value="Value5">Text 5</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="ddlInsertName" runat="server">
<asp:ListItem Value="">--Select Zone Name--</asp:ListItem>
<asp:ListItem Value="Value 1">Text 1</asp:ListItem>
<asp:ListItem Value="Value 2">Text 2</asp:ListItem>
<asp:ListItem Value="Value 3">Text 3</asp:ListItem>
<asp:ListItem Value="Value 4">Text 4</asp:ListItem>
<asp:ListItem Value="Value 5">Text 5</asp:ListItem>
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
I mean when I put my grid view in Edit mode, I don't want my Dropdownlist show "--Select Zone Name--". I want it show "text 1",2,3 or 4...which is displaying in my Label in View mode. And you can do this in Gridview_RowEditing event. See the code below:
protected void Gridview_RowEditing(object sender, GridViewEditEventArgs e)
{
Label lbDisplayName = (Label)Gridview.Rows[e.NewEditIndex].FindControl("lbDisplayName");
string name = lbDisplayName.Text;
GridViewRow gvr = Gridview.Rows[e.NewEditIndex];
var dr = (DropDownList)gvr.FindControl("ddlName");
dr.SelectedItem.Text = name;
}
I am databinding a GridView to an object datasource. The gridview contains a TemplateField which contains a RadioButtonList with ListItems defined inline.
I want to be able to databind the SelectedValue of the RadioButtonList to the same underlying table as the other grid columns, but it doesn't work!
Do I have my syntax wrong, or is this impossible and requires looping code to individually select the proper item in each row?
<llblgenpro:LLBLGenProDataSource ID="llbComputerApplication" DataContainerType="EntityCollection" runat="server"></llblgenpro:LLBLGenProDataSource>
<asp:GridView ID="gridComputerApps" DataSourceID="llbComputerApplication" runat="server" AutoGenerateColumns="False"
EmptyDataText ="NO APPLICATIONS FOUND FOR THIS COMPUTER."
DataKeyNames="ComputerID, ApplicationID" EnableViewState="False"
style="border-style:dotted;border-width:thin"
>
<Columns>
<asp:BoundField DataField="ApplicationID" HeaderText="Application ID" SortExpression="ApplicationID" Visible="True" />
<asp:TemplateField HeaderText="Application Name"><ItemTemplate><%#Eval("Application.ApplicationName")%></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="Normalized Name"><ItemTemplate><%#Eval("Application.NormalizedAppName")%></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="Notes"><ItemTemplate><%#Eval("Application.NormalizedNotes")%></ItemTemplate></asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<asp:RadioButtonList SelectedValue='<%#Eval("RequirementOption")%>' ID="rblRequirementOption" RepeatDirection="Horizontal" runat="server">
<asp:ListItem Value="Need Now" Text="Need Now"></asp:ListItem>
<asp:ListItem Value="Need Someday" Text="Need Someday"></asp:ListItem>
<asp:ListItem Value="Do Not Need" Text="Do Not Need"></asp:ListItem>
</asp:RadioButtonList>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="NormalizedNotes" HeaderText="Notes" Visible="False" />
</Columns>
</asp:GridView>
What you have should work. Are you getting an error? Here's a working example copied from my current project. I'm binding to a nullable bit field - so have a hidden list item to accept the nulls.
<asp:RadioButtonList runat="server" ID="MyRbl" SelectedValue='<%# Bind("MyRblField") %>'
CssClass="NormalTextBox" RepeatDirection="Horizontal">
<asp:ListItem Value="false" Text="No" />
<asp:ListItem Value="true" Text="Yes" />
<asp:ListItem Value="" Text="" style="display: none" />
</asp:RadioButtonList>
I also experienced this problem (nothing selected in radiobuttonlist) when binding against boolean values in MS SQL:
radDefault.Items.Add(new ListItem("Yes", "true"));
radDefault.Items.Add(new ListItem("No", "false"));
In my case, the solution was to capitalize the first letter of the true/false values, then the radiobuttonlistworked as expected:
radDefault.Items.Add(new ListItem("Yes", "True"));
radDefault.Items.Add(new ListItem("No", "False"));
Or, declaratively:
<asp:RadioButtonList runat="server" ID="radDefault" SelectedValue='<%# Bind("DB_FIELD") %>'>
<asp:ListItem Value="False" Text="No" />
<asp:ListItem Value="True" Text="Yes" />
</asp:RadioButtonList>
I didn't like the idea of using css to hide an item. Instead, I found this solution to add a blank item but remove it in the code behind.
<asp:RadioButtonList ID="MyRadioButtonList" runat="server"
SelectedValue='<%# Bind("Blah") %>'
OnDataBound="MyRadioButtonList_DataBound">
<asp:ListItem Value=""></asp:ListItem>
<asp:ListItem Value="A"></asp:ListItem>
<asp:ListItem Value="B"></asp:ListItem>
<asp:ListItem Value="C"></asp:ListItem>
</asp:RadioButtonList>
protected void MyRadioButtonList_DataBound(object sender, EventArgs e)
{
RadioButtonList list = (RadioButtonList)sender;
ListItem blank = list.Items.FindByValue("");
if (blank != null)
list.Items.Remove(blank);
}
<asp:RadioButtonList runat="server" ID="MyRbl" SelectedValue='<%# Bind("MyRblField") %>'
CssClass="NormalTextBox" RepeatDirection="Horizontal">
<asp:ListItem Value="false" Text="No" />
<asp:ListItem Value="true" Text="Yes" />
<asp:ListItem Value="" Text="" selected="true" style="display: none" />
</asp:RadioButtonList>
It work me .....
gnanasekar.s vilangulathur
This piece of code
<asp:DropDownList runat="server" ID="testdropdown" SelectedValue="2">
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2"></asp:ListItem>
<asp:ListItem Text="3" Value="3"></asp:ListItem>
</asp:DropDownList>
yields this error:
The 'SelectedValue' property cannot be
set declaratively.
Yet, this is a legal and commonly used edit template for databound GridViews. The SelectedValue attribute certainly appears to be declaratively set here.
<EditItemTemplate>
<asp:DropDownList runat="server"
ID="GenreDropDownList"
DataSourceID="GenreDataSource"
DataValueField="GenreId"
DataTextField="Name"
SelectedValue='<%# Bind("Genre.GenreId") %>'>
</asp:DropDownList>
</EditItemTemplate>
The question is: what is the difference between the cases when you are allowed to set it declaratively and those in which you are not? The error message implies that it's never allowed.
in markup use SelectedValue='<%# "32" %>' syntax .(note the order of single and then the double quotes in the following example ):
<asp:DropDownList ID="ddlField" SelectedValue='<%# "32" %>'
runat="server" DataTextField="Name" DataValueField="ID" >
</asp:DropDownList>
or in code-behind just after DataBinding .(example):
ddlField.DataSource = Fields.SelectAll();
ddlField.DataBind();
ddlField.SelectedValue = "32";
It means you cannot set it through the designer.
The correct way is:
<asp:DropDownList runat="server" ID="testdropdown">
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2" Selected></asp:ListItem>
<asp:ListItem Text="3" Value="3"></asp:ListItem>
</asp:DropDownList>
The reason the bound method works is because the value isn't selected in design mode but at runtime after the control is bound to a datasource
The DropDownList.SelectedValue method is meant to be applied at runtime hence the error about not being able to set it 'decoratively'