Hi Cerebrus,
This is how my code looks like right now:
<asp:DropDownList ID="myDropDownList" runat="server"
OnDataBinding="myDropDownList_DataBinding"
OnDataBound="myDropDownList_DataBound"
SelectedValue='<%# Bind("myID") %>'
DataTextField="Name"
DataValueField="myID" />
And in the code behind:
Dim ddlBound As Boolean = False
Protected Sub myDropDownList_DataBinding(ByVal sender As Object,
ByVal e As EventArgs)
Dim myDropDownList As DropDownList = sender
Dim myTable As New DataTable
If Not ddlBound Then
ddlBound = True
Dim DBConnection As New
SqlConnection(ConfigurationManager.ConnectionStrings("myServer").ConnectionString)
'--- QUERY MODIFIED ---
Dim query As String = "SELECT ... FROM ... WHERE ..."
Dim cmd As New SqlCommand(query , DBConnection)
myTable .Columns.Add("myID")
myTable .Columns.Add("Name")
Dim adapter As New SqlDataAdapter
adapter.SelectCommand = photographersCMD
adapter.Fill(myTable )
Dim newRow As DataRow = myTable .NewRow
newRow("myID") = ""
newRow("Name") = "-- Select a photographer --"
myTable .Rows.InsertAt(newRow, 0)
myDropDownList.DataSource = myTable
myDropDownList.DataBind() ---> At this point, before
handling the DataBound event, an error message is thrown saying the
DDL has a value that is not in the list of items
End If
End Sub
'If I remove SelectedValue='<%# Bind("myID") %>' in the design page,
there will be no error message being thrown in the DataBind event and
it will handle the DataBound event.
Protected Sub myDropDownList_DataBound(ByVal sender As Object,
ByVal e As System.EventArgs)
Dim drv As DataRowView = myFormView.DataItem
Dim myID As String = drv("myID").ToString.TrimEnd()
Dim ddl As DropDownList = sender
If Not IsDBNull(myID ) Then
ddl.SelectedValue = myID
Dim selectedItem As ListItem =
ddl.Items.FindByValue(myID )
If selectedItem Is Nothing Then
ddl.SelectedIndex = 0
Else
selectedItem.Selected = True
End If
ddl.SelectedValue = myID ----> when checking the selected
value after this line, the new value is not set; ddl.SelectedValue =
""
End If
End Sub
I checked the DropDownList and it's being bound correctly. I used test
values for myID, choosing these values from the values I know that are
in the DDL (I made an iteration and double checked if the value was
there - it was). Even with these test values, ddl.SelectedValue = myID
doesn't work. After leaving the DataBound routine, it goes to my
routine for binding the FormView and an exception in thrown in the
line: myFormView.DataBind() saying that the selected value in the DDL
doesn't exist in the list of items.
Any suggestions of what is happening?
Thanks,
Ana
On May 25, 11:30 pm, Cerebrus <[email protected]> wrote:
> I tried to reply yesterday, but the reply could not be posted due to
> network issues... so here goes again.
>
> I think that setting the selected value within the control's databound
> event may not be a good place. Instead, try to do it in the Parent
> control's (a FormView in this case) databound event. I haven't had a
> chance to try a sample, but this is one possibility that comes to
> mind.
>
> If you post a complete sample (athttp://dotnetdevelopment.pastebin.com,
> for instance), maybe we can test and determine the exact cause of the
> problem.