1
 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. 覆盖 Mr. 并得到如下结果:

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

我使用查询字符串将 User_ID 从View_User.aspxto传递Create_User.aspx给编辑用户。Id 变得正确,显示Create_User.aspx. 所有控件都正确获取正确的数据。但是当我填充当前用户的标题时,它会用DropDownList. (我唯一的问题是DropDownList它被覆盖了)。

4

3 回答 3

0

这正是您的代码所做的:

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

于 2012-04-17T12:34:27.493 回答
0

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

if (dataTablerepeaterUserList.rows.count > 0)
{
     ForEach(ListItem  itm  In ddlTitle.Items)
     {
            If (itm.Text = dataTablerepeaterUserList.Rows[0].tostring())
            {
                  itm.Selected = True;
            }
     }
}
于 2012-04-17T12:40:26.537 回答
0

您的代码的问题在于, 您只是覆盖.textListItem.DropDownList

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

// 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”作为参数添加到执行查询的任何位置。

于 2012-04-17T12:49:41.037 回答