我越來越困惑我的代碼,不知道如何實現我想要的。 我有兩個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();
}
哪些錯誤與'myItem.Selected = TRUE'? – V4Vendetta
改變了它,但我認爲我的代碼做的是同樣的事情:)無法測試它,因爲我不知道如何找到SELECT OfficeID FROM SESLogin WHERE SESLoginID = loginID – Angie
不是真的'SelectedValue'是不同於文本,除非你是綁定同樣的事情,文本和價值 – V4Vendetta