嵌入在listvew中的asp.net下拉列表,不提供更新参数的选定值

时间:2011-09-21 09:31:29

标签: asp.net listview .net-4.0 drop-down-menu sqldatasource

我有一个带有listview的asp.net页面,它绑定到SQLDataSource。嵌入到编辑和插入模板中我有一个dropDownList,它绑定到第二个SQLDataSource。在更新参数中,我已经指定了相应的参数来使用DropDownList的Selected Value(至少我认为我有)。不幸的是,所选择的值并没有通过更新。如果我尝试显式地引用dropdowlist控件并尝试执行更新或插入,则运行时会抱怨有太多参数传递给用于执行更新/插入的存储过程。代码片段如下。

修改模板

<td class="GridContent">
<asp:DropDownList 
    ID="lstDataType" 
    runat="server" 
    DataSourceID="DataType" 
    DataTextField="Name" 
    DataValueField="Name" 
    CssClass="GridContent">
</asp:DropDownList>

控制参数(使用ListView控件 - 不提供所选值)

<asp:ControlParameter 
    ControlID="lstFields" 
    Name="DataType" 
    PropertyName="SelectedValue"
    Type="String" />

控制参数(使用DropDownList控件 - 更新抱怨参数太多)

<asp:ControlParameter 
    ControlID="lstTypeID" 
    Name="Name" 
    PropertyName="SelectedValue"
    Type="String" />

所以我想我的问题是如何让更新的控制参数引用嵌入式下拉列表的选定值。

更新

最后我花了一些时间才找到答案,但这很简单;虽然在ListView控件树底部找到控件是一个完整的噩梦。

我所做的是在更新中添加一个隐藏的标签控件并插入模板,并将其绑定到listview的SQLDataSource。然后我在这篇文章底部的MSDN网站上抓取了一些示例代码中的FindControlRecursive函数:

http://msdn.microsoft.com/en-us/library/y81z8326.aspx

然后在我的页面的Page_Load方法中,我添加了两个调用FindControlRecursive函数,一个用于获取标签,另一个用于获取下拉列表。 然后简单地将DropDownList.text值分配给Label.text,这一切都很好用。

1 个答案:

答案 0 :(得分:0)

我一直在使用嵌入式下拉列表进行另一个listview并做了一个有趣的发现(我想是这样)。似乎没有必要使用代码将所选项目的文本分配给标签控件。所有必要的是隐藏标签和下拉列表都绑定到DataSource中的相应字段。