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

标签 c# asp.net mysql

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

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

我走在正确的道路上吗?在我事先转换登录ID 之前,我需要弄清楚如何比较SESLoginID = 登录ID。有什么帮助吗?

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.SESLogin 内连接 sesuser.Office 上 sesuser.Office.OfficeID = sesuser.SESLogin.OfficeID WHERE SESLoginID LIKE '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();
    }

最佳答案

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

设置DataTextFieldDataValueField

然后,在将数据绑定(bind)到下拉列表后,您可以说出类似 ddl.Items.FindByText("requiredloginid").Selected = true 的内容。

关于c# asp.net 下拉列表选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6465823/

相关文章:

c# - 如何在桌面应用程序中使用 DbContext 和 DI?

c# - 在 C# 中,如何使用 Console.WriteLine 方法从 SqlCommand 写入所有列

c# - 样式 <asp :Button/> with CSS

asp.net - Azure Web应用程序Kudu配置

MySQL、json、JSON_ARRAY_APPEND - 为什么 append 在 5.7.13 上不起作用?

C# 在继承类中为父属性添加自定义属性

javascript - 对话框 jquery 未调整大小

c# - 我可以从 C# 类创建 VB 类的对象吗

mysql - PL SQL Procedure (Oracle) 比较 where 子句中的变量

MYSQL CONV 从十六进制到十进制的问题