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

时间:2015-10-30 11:36:11

标签: c# asp.net visual-studio-2010 code-behind jquery-multiselect

想象一下这张表:

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

我想要做的是在用户5的列表框中为MatchInterests字段预先选择MatchValues值。因此,我想要预先选择的结果数据集如下所示:

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 记录中的值,并且我需要选择每个记录中的值。

按要求:控制名称兴趣的标记。

<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>

1 个答案:

答案 0 :(得分:1)

你在循环的每次迭代中有效地覆盖SelectedValue,这就是为什么你只看到最后一个被选中的原因。

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

所以,而不是

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

你会有

Interests.SetSelected(x, true);

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