Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c asp.net下拉列表选择值_C#_Asp.net_Mysql - Fatal编程技术网

C# c asp.net下拉列表选择值

C# c asp.net下拉列表选择值,c#,asp.net,mysql,C#,Asp.net,Mysql,我对我的代码感到困惑,不知道如何实现我想要的东西。 我有两个sql表,一个包含OfficeID和匹配的OfficeName,另一个包含user。我有一个页面,允许一个人编辑关于这个人的信息。加载页面时,应该从下拉列表中选择其信息正在编辑的人员的当前官名。因此,我有: 对于我的C和SQL知识水平来说,这可能是非常低效和令人困惑的,但尽管如此,我还是决心学习如何做到这一点。我目前拥有的是在创建下拉列表之前,我获取用户Id,然后从数据库中选择其对应的officeID,然后在创建下拉列表时,我检查off

我对我的代码感到困惑,不知道如何实现我想要的东西。 我有两个sql表,一个包含OfficeID和匹配的OfficeName,另一个包含user。我有一个页面,允许一个人编辑关于这个人的信息。加载页面时,应该从下拉列表中选择其信息正在编辑的人员的当前官名。因此,我有:

对于我的C和SQL知识水平来说,这可能是非常低效和令人困惑的,但尽管如此,我还是决心学习如何做到这一点。我目前拥有的是在创建下拉列表之前,我获取用户Id,然后从数据库中选择其对应的officeID,然后在创建下拉列表时,我检查officeID是否与另一个表中的对应。如果找到匹配项,则会将其设置为下拉列表的选定值

我走对了吗?在转换loginID之前,我需要弄清楚如何比较SESLoginID=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”时转换失败 [官方名称] 从sesuser.sesslogin 内部用户办公室 在sesuser.Office.OfficeID=sesuser.SESLogin.OfficeID上 其中SESLoginID将'287改为数据类型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();
    }

您可以分配一个数据源并绑定从查询中获得的结果,比如通过数据表

设置DataTextField和DataValueField

然后,在数据绑定到下拉列表后,可以说ddl.Items.FindByTextrequiredloginid.Selected=true。

为什么要使用

ddlBusinessUnit.DataBind();?
您正在将任何数据源绑定到dropdownlist

您可以指定在哪一行上发生错误吗

谢谢
Ashwani

myItem有什么问题。Selected=true?更改了它,但我假设我的代码也在做同样的事情:无法测试它,因为我不确定如何从SESLogin中找到SELECT OfficeID,其中SESLoginID=loginIDWell not really SelectedValue与text不同,除非您将相同的东西绑定到text和value,这只是我的一个小毛病。在可以使用try parse进行更好检查的属性中创建loginId全局变量,或者将其保留在范围内并作为参数传递。我更喜欢属性approachI更新了我的问题,在那里我编写了一个返回用户ID的OfficeName的过程,但似乎不起作用。System.NullReferenceException:对象引用未设置为对象的实例。请检查一下好吗?