想象一下这张表:
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>
答案 0 :(得分:1)
你在循环的每次迭代中有效地覆盖SelectedValue
,这就是为什么你只看到最后一个被选中的原因。
您需要在项目本身上设置Selected
属性或使用ListBox.SetSelected()
方法。方法的documentation page有一个例子。
所以,而不是
Interests.SelectedValue = row["MatchValue"].ToString();
你会有
Interests.SetSelected(x, true);
其中x
是您要选择的列表项的索引。您可能需要通过例如计算索引。如果您没有可用的索引,则根据row["MatchValue"]
获取项目。