DropDownList内容覆盖

时间:2012-04-17 12:21:04

标签: c# asp.net

 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 [“Title”] = Dr。然后用Dr.覆盖先生并得到如下结果:

| Dr.  |
| Mrs. |
| Miss.|
| Dr.  |

我正在使用querystring将User_ID从View_User.aspx传递到Create_User.aspx以供编辑用户使用。 ID正确,显示Create_User.aspx中的所有正确字段。所有控件都能正确获取正确数据但是当我填充当前用户的标题时,它会覆盖第一项DropDownList。 (我只有DropDownList被覆盖的问题。

3 个答案:

答案 0 :(得分:0)

这正是你的代码所做的:

默认情况下,下拉列表的第一个元素是选定的元素,并且您将覆盖它。

答案 1 :(得分:0)

当您通过userid获取特定用户的数据时,您将获得单个记录。所以需要为dataTablerepeaterUserList使用for循环。 只检查行是否存在然后使用它。 像

if (dataTablerepeaterUserList.rows.count > 0)
{
     ForEach(ListItem  itm  In ddlTitle.Items)
     {
            If (itm.Text = dataTablerepeaterUserList.Rows[0].tostring())
            {
                  itm.Selected = True;
            }
     }
}

答案 2 :(得分:0)

您的代码存在的问题是,您只是覆盖.text中第一个ListItem的{​​{1}}属性。

您要做的是找到您想要的现有DropDownList,并修改ListItem的{​​{1}}属性,以便选择正确的项目。这应该适合你:

SelectedIndex

作为旁注,您不应该在SQL中连接字符串,就像在您的示例中一样。这使您对SQL注入攻击持开放态度。相反,您应该使用参数,如下所示:

DropDownList

然后添加&#34; @ User_ID&#34;作为您执行查询的地方的参数。