【问题标题】:Populate DropDownList from WebDataGrid从 WebDataGrid 填充 DropDownList
【发布时间】:2010-12-17 00:49:01
【问题描述】:

我有一个链接到 SqlDataSource 的 WebDataGrid 来显示数据。选择一行后,我想用该行中的数据填充一些文本框和下拉列表,以进行编辑。文本框工作正常;我使用以下代码选择网格中的第二个字段(日期)并填充相应的文本框(我使用的是 VB):

txtDate.Text = currentRow.Items(2).Value

但是,当我尝试使用相同的代码结构填充下拉列表时,我收到以下错误:

'ddlType' has a SelectedValue which is invalid because it does not exist in the list of items.

我认为问题可能是使用 type_id 填充下拉列表,而网格显示 type_name。这会导致问题吗,有没有办法解决这个问题?

【问题讨论】:

    标签: asp.net drop-down-menu webdatagrid


    【解决方案1】:

    您可以尝试以下几种方法:

    1. 更改 SQLDataSource 以同时返回 type_id 并将列设置为 visible="false",这样您就可以选择该字段而不是名称并将其用于 .SelectedValue。

    2. 如果这是不可能的,那么您可以使用这样的代码(这只有在下拉菜单中显示的文本是唯一的并且与网格视图中显示的文本完全相同时才有效):

      'replace this with the call to currentRow.Items(#).Value
      Dim sometext As String = "type_name"

      DropDownListName.Items.FindByText(sometext).Selected = True

    3. 另一种可能性是遍历下拉列表中的每个元素并找到文本,这类似于蛮力方法但有效。

      'replace this with the call to currentRow.Items(#).Value

      Dim sometext As String = "type_name"

      For Each ddItem As ListItem In ddArriveAMPM.Items

       `If String.Compare(sometext, ddItem.Text, True) = 1 Then`   
           `ddItem.Selected = True`
        `End If`        
      `Next`
      

    【讨论】:

    • 我不确定我是否理解第二个选项(我对 ASP.NET 很陌生)。如何在不使用 currentRow.Items(#).Value 的情况下获取所选行的 type_name? (下拉列表中的每一项都是唯一的,并且与网格视图中显示的名称相同。)
    • 谢谢 - 我正在使用第一个建议!
    【解决方案2】:

    您必须先将项目添加到列表框中,然后才能选择它。

    DropDownListX.Items.Add("Item");
    

    DropDownListX.Items.Add(new ListItem("String","Value"));
    

    确保在选择新行时清除下拉框,否则旧行值将保留在那里。

    DropDownListX.Items.Clear();
    

    之后你可以使用 SelectedValue

    干杯, 斯蒂芬

    【讨论】:

    • 现在我收到以下错误消息:“无效的回发或回调参数...出于安全目的,此功能验证回发或回调事件的参数是否来自最初呈现它们的服务器控件. 如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。"并且填充文本框也停止工作。
    • 顺便说一下,对于:DropDownListX.Items.Add(new ListItem("String","Value")); -- 参数是 currentRow.Items(1).Value (或我需要的任何字段编号)吗?
    • 是的,做一个 currentRow.Items(1).Value.ToString() 可能很好。您可以对这两个项目执行此操作,以便稍后在代码中使用 SelectedValue 如果您没有 id 或绑定值的东西
    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多