根据查询结果中的记录预先 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"]
获取项目。
想象一下 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"]
获取项目。