2011-06-24 418 views
0

我越來越困惑我的代碼,不知道如何實現我想要的。 我有兩個SQL表,一個具有OfficeID和匹配的OfficeName,另一個包含用戶。我有一個頁面允許一個人編輯有關此人的信息。加載頁面時,應該從下拉列表中選擇正在編輯信息的人員的當前OfficeName。因此,我有這樣的:c#asp.net下拉列表選擇值

這可能是非常低效,混淆了我對C#和SQL的知識水平,但是我決心學會如何去做。我目前所擁有的是在創建下拉列表之前,我得到用戶標識,然後從數據庫中選擇相應的officeID,然後在創建下拉列表時檢查OfficeID以與其他表中的標識相對應。如果找到匹配項,它會將其設置爲下拉列表的選定值。

我在正確的軌道上嗎?我需要先弄清楚如何比較SESLoginID = loginID,然後再事先轉換loginID。任何幫助?

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(); 
    } 

不同版本的代碼,其中存在使用LoginID返回OfficeName的過程。不工作要麼給出一個錯誤: System.Data.SqlClient.SqlException:轉換nvarchar的值'SELECT [OfficeName] FROM sesuser.SESLogin INNER JOIN sesuser.Office ON sesuser.Office.OfficeID = sesuser時轉換失敗。 SESLogin.OfficeID WHERE SESLoginID LIKE'287''to data type 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

哪些錯誤與'myItem.Selected = TRUE'? – V4Vendetta

+0

改變了它,但我認爲我的代碼做的是同樣的事情:)無法測試它,因爲我不知道如何找到SELECT OfficeID FROM SESLogin WHERE SESLoginID = loginID – Angie

+0

不是真的'SelectedValue'是不同於文本,除非你是綁定同樣的事情,文本和價值 – V4Vendetta

回答

1

您可以指定一個數據源,並通過DataTable綁定從查詢中獲得的結果。

設置DataTextFieldDataValueField

然後,你可以這樣說:ddl.Items.FindByText("requiredloginid").Selected = true數據後勢必下拉。

+0

我更新了我的問題,在那裏我編寫了一個過程來爲用戶ID返回OfficeName,似乎不起作用。 System.NullReferenceException:未將對象引用設置爲對象的實例。你可以檢查嗎? – Angie

+0

現在不同的錯誤對不起 – Angie

0

你爲什麼要使用

ddlBusinessUnit.DataBind();? 

您有約束力的任何數據源的下拉列表。

你能指定你在哪一行上得到錯誤嗎?

感謝 Ashwani