下拉列表列表内容覆盖
本文关键字:覆盖 列表 下拉列表 | 更新日期: 2023-09-27 18:31:19
strSQL = "SELECT * FROM User_Reg WHERE User_ID='" + UserId + "'";
DataTable dataTablerepeaterUserList = null;
dataTablerepeaterUserList =objSqlDbComm.ExecuteDatasetQuery(strSQL).Tables[0];
foreach (DataRow dr in dataTablerepeaterUserList.Rows)
{
ddlTitle.SelectedItem.Text = dr["Title"].ToString();
}
<asp:DropDownList ID="ddlTitle" runat="server" CssClass="csstextbox" >
<asp:ListItem>Mr.</asp:ListItem>
<asp:ListItem>Mrs.</asp:ListItem>
<asp:ListItem>Miss.</asp:ListItem>
<asp:ListItem>Dr.</asp:ListItem>
</asp:DropDownList>
假设 dr["标题"]=Dr。 然后用博士覆盖先生,得到如下结果:
| Dr. |
| Mrs. |
| Miss.|
| Dr. |
我正在使用查询字符串将User_ID从View_User.aspx
传递到Create_User.aspx
以编辑用户目的。 id 正确,显示Create_User.aspx
中的所有正确字段。 所有控件都能正确获取正确的数据。但是当我填充当前用户的标题时,它会覆盖DropDownList
的第一项。 (我只对它被覆盖DropDownList
有问题)。
你的代码的问题在于你只是覆盖了DropDownList
中第一个ListItem
的.text
属性。
您要做的是找到所需的现有ListItem
,并修改DropDownList
的 SelectedIndex
属性,以便选择正确的项。 这应该适合您:
// Find the correct list item in the drop down based on your data
ListItem theItemYouWant = ddlTitle.Items.FindByText(dr["Title"].ToString());
// Change the selected index to that items index
ddlTitle.SelectedIndex = ddlTitle.Items.IndexOf(theItemYouWant);
作为旁注,您不应该像您的示例那样在 SQL 中连接字符串。 这使您容易受到SQL注入攻击。 相反,您应该使用参数,如下所示:
strSQL = "SELECT * FROM User_Reg WHERE User_ID = @User_ID";
然后将"@User_ID"作为参数添加到执行查询的任何位置。
这正是您的代码所做的:
默认情况下,下拉列表的第一个元素是所选元素,您将覆盖它。
当您通过用户ID获取特定用户的数据时,您将获得一条记录。所以需要使用 for 循环来表示 dataTablerepeaterUserList。只需检查行是否存在,然后使用它。喜欢
if (dataTablerepeaterUserList.rows.count > 0)
{
ForEach(ListItem itm In ddlTitle.Items)
{
If (itm.Text = dataTablerepeaterUserList.Rows[0].tostring())
{
itm.Selected = True;
}
}
}