下拉列表列表内容覆盖

本文关键字:覆盖 列表 下拉列表 | 更新日期: 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,并修改DropDownListSelectedIndex 属性,以便选择正确的项。 这应该适合您:

// 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;
            }
     }
}