listboxes.........

  • Thread starter Thread starter bill yeager
  • Start date Start date
B

bill yeager

I have several template columns inside of a datagrid.
Inside of these template columns are databound listboxes:

<asp:TemplateColumn HeaderText="Crew Chiefs">

<ItemTemplate>

<asp:listbox AutoPostBack="False"
BackColor="#ffffff" id="lstCrewChief" runat="server"
Rows="1" DataSource="<%# DsCrewChief1 %>" Enabled="True"
SelectionMode="Single" DataTextField="UserName"
DataValueField="UserName" />

</asp:listbox>

</ItemTemplate>

</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="EMT's/Drivers">

<ItemTemplate>

<asp:listbox AutoPostBack="False"
BackColor="#ffffff" id="lstEMTDriver" runat="server"
Rows="1" DataSource="<%# DsEMTDriver1 %>" Enabled="True"
SelectionMode="Single" DataTextField="UserName"
DataValueField="UserName" />

</asp:listbox>

</ItemTemplate>

</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="Riders">

<ItemTemplate>

<asp:listbox AutoPostBack="False"
BackColor="#ffffff" id="lstRider" runat="server" Rows="1"
DataSource="<%# DsRider1 %>" Enabled="True"
SelectionMode="Multiple" DataTextField="UserName"
DataValueField="UserName" />

</asp:listbox>

</ItemTemplate>

</asp:TemplateColumn>




I would like to do 2 things with these listboxes: One, is
to set the selected value in the listbox to the values I
retrieve in the database. The second, is to set the
selected values in the listboxes to values before I write
the data to the database.

I'm confused about the ITEMDatabound event of the
datagrid. Is this event used to get the values of the
listboxes BEFORE I write the data to the database (which I
think it is)? If so, is there an event I need to use to
SET the values in the listboxes to the values I retrieved
from the database? If there is no event, how do I go about
setting the values of the listboxes?

Also, how do I set and retrieve values from a listbox that
can have multiple selections...

Below is the code I have for the ItemDataBound
event...........


Private Sub DataGrid1_ItemDataBound(ByVal sender As
Object, ByVal e As
System.Web.UI.WebControls.DataGridItemEventArgs) Handles
DataGrid1.ItemDataBound

'Get the correct values for the listboxes
If e.Item.ItemType = ListItemType.Item Then
Dim lstCrewChiefTemp As ListBox
Dim lstEMTsDriverTemp As ListBox
Dim lstRiderTemp As ListBox
lstCrewChiefTemp = e.Item.FindControl
("lstCrewChief")
lstCrewChiefTemp.SelectedIndex =
lstCrewChiefTemp.Items.IndexOf
(lstCrewChiefTemp.Items.FindByValue(e.Item.DataItem
("Username")))
lstEMTsDriverTemp = e.Item.FindControl
("lstEMTDriver")
lstEMTsDriverTemp.SelectedIndex =
lstEMTsDriverTemp.Items.IndexOf
(lstEMTsDriverTemp.Items.FindByValue(e.Item.DataItem
("Username")))
lstRiderTemp = e.Item.FindControl("lstRider")
lstRiderTemp.SelectedIndex =
lstRiderTemp.Items.IndexOf(lstRiderTemp.Items.FindByValue
(e.Item.DataItem("Username")))
End If

End Sub

Thanks,

Bill.
 
Answer to Qn1.

ItemDataBound is the method that is called just after the
Data binding is over. This is the place where you add your
code to choose what is selected in the list box.

You can do it this way.

Put this code in ItemDataBound with your regular check for
ItemTypes.

Dim lstCrewChiefTemp As ListBox
lstCrewChiefTemp.Items.FindByValue("123").Selected = True

Answer for Qn2.

You can access the multiple items selected in ListBox as
follows.

dim item as ListItem
For Each item in List1.Items
if item.Selected = True Then
'code to process the selected items.
End if

Next

I guess this is what you are looking for. If NOT please
reply back.

With Regards
Prakash R.
 
Prakash, is there an event I can use to set the values of
the respective listboxes once I get to the page.

At first, I load the listboxes (if not already in cache),
then, I want to set the selected values in the listboxes
to what they are in the database (via another query from
a previous user update that the user had selected prior).

If there is no event I can use, I was planning on looping
thru the columns in the datagrid and setting the values
of the listboxes that way........
 
Bill,

I would still use ItemDataBound to set the listbox
selection.

Here is an example of how I acheived in my own problem.
The datagrid is databound. I have a column with the value
of the listbox to be set with the selection. So, to set
the listbox I pick the value from the other column, which
is bound just before this event. In case where no
selection is available for the row, a default string is
inserted and selected in the listbox.

If ViewState("InsertMode") = True Then
CType(e.Item.Cells(6).FindControl("CompanyName"),
DropDownList).Items.Insert(0, New ListItem("Select one", -
99))
Else
ID = CType(e.Item.Cells(5).FindControl("CompanyID"),
LiteralControl).Text
CType(e.Item.Cells(6).FindControl("CompanyName"),
DropDownList).Items.FindByValue(ID).Selected = True
End If

Hope this helps.
Prakash R.
 
Back
Top