根据查询结果中的记录预先 select 多 select 列表框中的值

Pre-select the values in a multi-select listbox based on records in query results

想象一下 table:

MatchID UserID  MatchField        MatchValue
7          5    MatchInterests        3
8          5    MatchInterests        7
9          5    MatchInterests       12
10         5    MatchInterests       20
11         5    MatchInterests       26
12         2    MatchInterests        7
13         2    MatchInterests       26
14         4    MatchInterests       26
15         5    MatchStates          12
16         5    MatchStates          11
17         2    MatchStates           1
18         2    MatchStates          17
19         4    MatchStates          10

我想要做的是预先 select 用户 5 列表框中 MatchInterests 字段的 MatchValues 值。所以我想要预 selected 的结果数据集看起来像这样:

MatchID UserID  MatchField        MatchValue
7          5    MatchInterests        3
8          5    MatchInterests        7
9          5    MatchInterests       12
10         5    MatchInterests       20
11         5    MatchInterests       26

最好的方法是什么?

我尝试做的是:

string strSQL2 = "SELECT MatchValue FROM tmpUsermatch WHERE MatchField = 'MatchInterests' AND UserID = '" + (DT2["UserID"].ToString()) + "'";
Interests.SelectionMode = ListSelectionMode.Multiple;
using (var con = new SqlConnection(strCon1))
using (var adapter2 = new SqlDataAdapter(strSQL2, con))
   {
     DataTable dt2 = new DataTable();
     adapter2.Fill(dt2);
     foreach (DataRow row in dt2.Rows)
     {
       Interests.SelectedValue = row["MatchValue"].ToString();
     }
   }

这有效,但只会导致数据集的 last 记录中的值被 selected 并且我需要 every 中的值 待 select 编辑的记录。

As Requested: 控件名称 Interests 的标记。

<tr>
   <td style="width:160px">
      <asp:Label ID="Label26" runat="server" AssociatedControlID="Interests">Interests:</asp:Label>
   </td>
   <td style="width:300px">
      <div id="UCStyle1">
        <asp:ListBox ID="Interests" SelectionMode="Multiple" runat="server">
        </asp:ListBox>
      </div>
   </td>
</tr>

您在循环的每次迭代中有效地覆盖了 SelectedValue,这就是为什么您只看到最后一个 selected。

您需要在项目本身上设置 Selected 属性 或使用 ListBox.SetSelected() 方法。该方法的 documentation page.

上有一个示例

所以,而不是

Interests.SelectedValue = row["MatchValue"].ToString();

你会

Interests.SetSelected(x, true);

其中 x 是您要 select 的列表项的索引。您可能需要通过例如计算索引如果您手边没有可用的索引,则根据 row["MatchValue"] 获取项目。