使用DataSource的DropDownList更新GridView

时间:2011-12-07 02:48:50

标签: c# asp.net sql

我正在使用V2005 C#。

我的.aspx页面中有一个GridView,我可以使用EditItemTemplate中的DropDownList控件更新我的数据库。

我的性别列的DDL:

    <asp:TemplateField HeaderText="Gender" SortExpression="Gender">
        <EditItemTemplate>
            <asp:DropDownList ID="DropDownList2" runat="server" SelectedValue='<%# Bind("Gender") %>'>
                <asp:ListItem>M</asp:ListItem>  
                <asp:ListItem>F</asp:ListItem>
            </asp:DropDownList>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%# Bind("Gender") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

在我的性别列的DDL EditItemTemplate中,我使用了硬编码值,它可以工作。

但是,我尝试在另一列上实现DDL。这一次,我使用了一个SqlDataSource,它从另一个表中选择数据,而不是使用固定值,但是他们给了我一个错误: 'DropDownList3' has a SelectedValue which is invalid because it does not exist in the list of items.Parameter name: value

我也试图实现SelectedValue='<%# Bind("MemberType") %>',但它没有用。

以下是我的MemberType DDL EditItemTemplate:

的代码
    <asp:TemplateField HeaderText="MemberType" SortExpression="MemberType">
        <EditItemTemplate>
            <asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource2"
                DataTextField="MemberType" DataValueField="MemberType" SelectedValue='<%# Bind("MemberType") %>'>
            </asp:DropDownList>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="Label2" runat="server" Text='<%# Bind("MemberType") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

有人知道这里有什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

嗯......也许这是一个愚蠢的问题,但实际上是在SqlDatasource SELECT查询中返回的列表中的值?一个常见的问题是,如果查询中没有NULL值,那么它不在列表中,因此只要切换到编辑模式,就会抛出错误,因为默认值为null。

我的库中有一个Misc函数,它接受DropDownList引用并添加一个空行。

编辑添加一些代码:

我们使用Telerik Rad Controls,因此这适用于RadComboBox,但由于该控件只是扩展了DropDownList(我认为,它们可能扩展了TextBox ...),添加空项的语法应该类似于我在下面的内容。

// If there is already an empty row, we will not add an aditional empty row
        RadComboBoxItem  emptyItem = null;
        emptyItem = rcbObject.FindItemByValue(null) ?? rcbObject.FindItemByValue("");

        if (emptyItem !=null)
            return;

        // Add a Empty(null) item to the dropdown list
        RadComboBoxItem item_null = new RadComboBoxItem();

        item_null.Text = "";
        item_null.Value = null;
        rcbObject.Items.Insert(0, item_null);

希望这有帮助!