2011-06-24 3 views
0

Je suis confus avec mon code et je ne sais pas comment implémenter ce que je veux. J'ai deux tables sql une qui a OfficeID et OfficeName correspondant et un autre qui contient l'utilisateur. J'ai une page qui permet à une personne d'éditer des informations sur la personne. Lorsque la page est chargée, elle doit sélectionner dans la liste déroulante le nom Office actuel d'une personne dont les informations sont en cours d'édition. Ainsi j'ai ceci:C# asp.net liste déroulante sélectionnez la valeur

Ceci est probablement extrêmement inefficace et déroutant pour mon niveau de connaissance de C# et de SQL, mais néanmoins je suis déterminé à apprendre comment le faire. Ce que j'ai actuellement est Avant la création de la liste déroulante je reçois l'identifiant des utilisateurs, puis sélectionne dans la base de données son ID de bureau correspondant, puis en créant la liste déroulante je vérifie que l'ID Office correspond à ceux de l'autre table. S'il a trouvé le résultat, il le définira comme la valeur sélectionnée pour la liste déroulante.

suis-je sur la bonne voie? J'ai besoin de comprendre comment comparer SESLoginID = loginID avant de convertir loginID avant main. De l'aide?

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using Functions; 
using HelloApp; 

public partial class UserUpdate : Page 
{ 
    private Int32 loginID = 0; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     loginID = Convert.ToInt32(Request.QueryString["SESLoginID"]); 

     if (!Page.IsPostBack) 
     { 
      BindBusinessUnitDDL(); 
     } 

    } 

    protected void BindBusinessUnitDDL() 
    { 
     SqlConnection conn; 
     string sql; 
     SqlCommand cmd; 
     int error; 
     conn = Database.DBConnect(out error); 

     sql = String.Format("SELECT OfficeID FROM SESLogin WHERE SESLoginID = loginID"); 
     cmd = new SqlCommand(sql, conn); 
     SqlDataReader rdrr = cmd.ExecuteReader(); 
     ListItem office = new ListItem(); 
     office.Value = Convert.ToString(rdrr.GetInt32(0)); 
     Database.DBClose(conn); 

     sql = String.Format(
      "SELECT OfficeID, OfficeName FROM Office"); 
     cmd = new SqlCommand(sql, conn); 
     SqlDataReader rdr = cmd.ExecuteReader(); 

     DropDownList ddlBusinessUnit = (DropDownList)(this.LoginFormView.FindControl("ddlBusinessUnit")); 

     while (rdr.Read()) 
     { 
      ListItem myItem = new ListItem(); 
      myItem.Value = Convert.ToString(rdr.GetInt32(0)); 
      myItem.Text = rdr.GetString(1); 
      ddlBusinessUnit.Items.Add(myItem); 
      if(office.Value == myItem.Value){ 
       ddlBusinessUnit.SelectedValue = myItem.Text; 
      } 
     } 
     Database.DBClose(conn);   

     ddlBusinessUnit.DataBind(); 
     PageUser myUser = new PageUser(); 
    } 

Une autre version du code où il existe une procédure de retour OfficeName en utilisant un LoginID. travail doesnt soit donne une erreur: System.Data.SqlClient.SqlException: Échec de la conversion de la valeur nvarchar 'SELECT [OfficeName] DE sesuser.SESLogin INNER JOIN sesuser.Office ON sesuser.Office.OfficeID = sesuser. SESLogin.OfficeID O WH SESLoginID LIKE '287' 'vers le type de données int.

public partial class UserUpdate : Page 
{ 
    private Int32 loginID = 0; 
    private String loginIDE = ""; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     loginIDE = Request.QueryString["SESLoginID"]; 
     loginID = Convert.ToInt32(Request.QueryString["SESLoginID"]); 

     if (!Page.IsPostBack) 
     { 
      BindBusinessUnitDDL(); 
     } 

    } 

    protected void BindBusinessUnitDDL() 
     { 
      SqlConnection connec = null; 
      SqlCommand cmd = null; 
      string sqls = ""; 
      int errNum = 0; 
      connec = Database.DBConnect(out errNum); 
      if (errNum != 0) 
       throw new Exception("Database Connection Error."); 

      sqls = "Login_GetOffice"; 
      cmd = new SqlCommand(sqls, connec); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@userID", loginIDE); 
      string office = (string)cmd.ExecuteScalar(); 

     SqlConnection conn; 
     string sql; 
     int error; 
     conn = Database.DBConnect(out error); 

     sql = String.Format(
      "SELECT OfficeID, OfficeName FROM Office"); 
     cmd = new SqlCommand(sql, conn); 
     SqlDataReader rdr = cmd.ExecuteReader(); 

     DropDownList ddlBusinessUnit = (DropDownList)(this.LoginFormView.FindControl("ddlBusinessUnit")); 

     while (rdr.Read()) 
     { 
      ListItem myItem = new ListItem(); 
      myItem.Value = Convert.ToString(rdr.GetInt32(0)); 
      myItem.Text = rdr.GetString(1); 
      ddlBusinessUnit.Items.Add(myItem); 
      if(office == myItem.Text){ 
       myItem.Selected = true; 
      } 
     } 
     Database.DBClose(conn);   

     ddlBusinessUnit.DataBind(); 
     PageUser myUser = new PageUser(); 
    } 
+0

Quoi de mal à 'myItem.Selected = true'? – V4Vendetta

+0

l'a changé, mais j'ai supposé que mon code faisait la même chose :) Je peux le tester parce que je ne suis pas sûr comment trouver SELECT OfficeID FROM SESLogin OERE SESLoginID = loginID – Angie

+0

Eh bien pas vraiment 'SelectedValue' est différent du texte sauf si vous liez la même chose à la fois le texte et la valeur – V4Vendetta

Répondre

1

Vous pouvez affecter une source de données et lier les résultats obtenus à partir de la requête, via un DataTable.

Réglez le DataTextField et DataValueField

Ensuite, vous pouvez dire quelque chose comme ddl.Items.FindByText("requiredloginid").Selected = true après les données est lié à la liste déroulante.

+0

J'ai mis à jour ma question, où j'ai écrit une procédure pour retourner OfficeName pour un userID, ne semble pas fonctionner. System.NullReferenceException: référence d'objet non définie sur une instance d'un objet. Pourriez-vous vérifier s'il vous plaît? – Angie

+0

une erreur différente maintenant désolé – Angie

0

Pourquoi utilisez-vous

ddlBusinessUnit.DataBind();? 

Vous liez une source de données à l'dropdownlist.

Pouvez-vous spécifier sur quelle ligne vous obtenez une erreur?

Merci Ashwani

Questions connexes