tags:

views:

35

answers:

0

I'm using LINQ to SQL and want to be able to select a parent or no parent. Let's say I have a People table with PersonId, Name and ParentId columns. In ASP I want to enter the name, select a parent and click 'Add' to create a new Person record, but I also want to be able to leave the ParentId null. Don't ask why, this is just a simplified explanation for what I want to do.

<asp:LinqDataSource ID="LinqPeople" runat="server" 
    ContextTypeName="MyDataContext" EntityTypeName="" 
    Select="new (PersonId, Name)" TableName="People"/>
<asp:TextBox ID="textName" runat="server" />
<asp:DropDownList runat="server" ID="dropParent"
    DataSourceID="LinqPeople" DataTextField="Name" DataValueField="PersonId" />
<asp:Button ID="buttonAddPerson" runat="server" Text="Add" />

Is there any way to display 'None' in the list box with a value of null? I have thought of a few options, which is best or are there any others?

  1. Create a stored procedure for the SQL "SELECT PersonId, Name FROM People UNION SELECT Null, 'NONE'"

  2. Add a CheckBox for "NO PARENT"

  3. Put a ListItem in the markup for the DropDownList

  4. Add the item on the DataBound event handler

I found a better way, adding a ListItem in the markup:

<asp:LinqDataSource ID="LinqPeople" runat="server" 
    ContextTypeName="MyDataContext" EntityTypeName="" 
    Select="new (PersonId, Name)" TableName="People"/>
<asp:TextBox ID="textName" runat="server" />
<asp:DropDownList runat="server" ID="dropParent"
        DataSourceID="LinqPeople" DataTextField="Name" DataValueField="PersonId">
    <asp:ListItem Value="">(none)</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="buttonAddPerson" runat="server" Text="Add" />

I cannot find any way to return the actual value 'NULL' in SelectedValue however, but I can handle that I guess. I think the ListItem way is the best because it is defined in the markup and doesn't require any code...