Hi guys,
I’ve got a dropdown list that’s being bound in a formview as part of an objectDataSource:
<asp:DropDownList ID="EmployeeDropDown" CssClass="input" runat="server" SelectedValue='<%# Bind("Employee") %>'
AppendDataBoundItems="True" DataSourceID="sqlEmployees" DataTextField="Name" DataValueField="Employee" />
This works fine, until there’s a value in the objectdatasource for Employee that is DBNull. Then I get an exception as there’s not null user in the dropdown list.
I’m trying to:
<asp:DropDownList ID="EmployeeDropDown" CssClass="input" runat="server" SelectedValue='<%# IIf(Bind("Employee") = System.DBNull.Value, "0", Bind("Employee") %>'
AppendDataBoundItems="True" DataSourceID="sqlEmployees" DataTextField="Name" DataValueField="Employee" />
But the bind function fails, and I get a “Bind is not declared.” error. What’s the correct way of handling dbnull’s when binding from an objectdatasource.
kwik
Change the Bind(“Employee”) to Eval(“Employee”)
Thanks for your reply, dhtmlgod.
Eval would work, but I’m trying to bind this dropdown two ways. So the selected value is chosen from the database, and then the new value updated in the table record on submit. My understanding of Eval was that it was one way??
Thanks in advance!
The best options might be to not return null (pah, I really don’t like nulls!), instead return -1…
Ah!
In my BLL (using the MS Example from http://www.asp.net tutorials), I’ve got a get method which pulls a datatable (one row in fact) by a particular ID. You reckon a check in there might be the best place to do it.
I guess I’m just trying to figure out a way to intercept the process of the data being pulled into my datatable -> objectdatasource -> formview -> dropdownlist checkign for null’s and giving it a safe value.
I’ll try this first thing in the morning.
I generally set a default value for any columns that might have a null, if it expects an integer, I’ll generally use -1. But there are a number of ways, using the SQL Server ISNULL() function is another.
Thankyou dthmlgod!
That appears to be working. I’ll remember it for next time, doing error/value checking on retrieval as well as when saving data!
I changed my retrieve into:
<System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, False)> Public Function GetDataByAssetID(ByVal AssetID As Integer) As AssetRegister.AssetsDataTable
Dim DT As New AssetRegister.AssetsDataTable
DT = Adapter.GetDataByAssetID(AssetID)
If DT.Rows(0).Item("Employee") Is System.DBNull.Value Then
DT.Rows(0).Item("Employee") = "Select"
End If
Return DT
End Function