使用特定表Database中的值填充c#中的DropDownList

时间:2018-01-09 10:45:50

标签: c# asp.net

我无法使用特定表数据库中的值填充c#中的 DropDownList

在此示例中,数据库中testing的行值为NULL。

我试过这段代码却没有成功。

如何解决这个问题?

你能帮助我吗?

提前感谢您的帮助,非常感谢。

我的代码如下。

ASPX

<asp:DropDownList ID="ddlTesting" runat="server">
    <asp:ListItem Text="Yes" Value="Y"></asp:ListItem>
    <asp:ListItem Text="No" Value="N"></asp:ListItem>
</asp:DropDownList>

CS

    ddlTesting.AppendDataBoundItems = true;

    string sql = String.Format(@"SELECT ");
    sql += String.Format("  Testing ");
    sql += String.Format(" FROM ");
    sql += String.Format("  `tbl_testing` ");
    sql += String.Format("  WHERE Id IN (?); ");

    using (OdbcConnection cn =
       new OdbcConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString))
    {
        using (OdbcCommand command =
                new OdbcCommand(sql, cn))
        {
            try
            {
                command.Parameters.AddWithValue("param1", Base64ForUrlDecode(Request.QueryString["sId"].ToString()));
                command.CommandType = CommandType.Text;
                command.Connection.Open();

                DataSet ds = new DataSet();
                OdbcDataAdapter da = new OdbcDataAdapter(command);
                da.Fill(ds);  

                ddlTesting.DataTextField = ds.Tables[0].Columns["Testing"].ToString(); 
                ddlTesting.DataValueField = ds.Tables[0].Columns["Testing"].ToString();   
                ddlTesting.DataSource = ds.Tables[0];
                ddlTesting.DataBind();

                Response.Write(ddlTesting.Items.Count);

                if (ddlTesting.Items.Count > 1)
                {
                    ddlTesting.Items.FindByValue("Testing").Selected = true;

                }
                else
                {
                    ddlTesting.SelectedValue = null;
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                command.Connection.Close();
            }

            ddlTesting.Items.Insert(0, new ListItem("[Y/N]", ""));
            ddlTesting.Items.Insert(1, new ListItem("[------------------]", "-99"));
        }            
    }

2 个答案:

答案 0 :(得分:1)

请试试这个:

    OleDbConnection conn = 
       new OleDbConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString);

    try
    {
        conn.Open();
        var cmd = new OleDbCommand("SELECT 
                                    IFNULL(Testing,'[Y/N]') AS Testing
                                    FROM tbl_Testing
                                    WHERE ID = @param1", conn);

        cmd.Parameters.AddWithValue("param1", Request.QueryString["sId"].ToString());

        using (OleDbDataReader reader = cmd.ExecuteReader())
        {
            if (reader.HasRows)
            {
                reader.Read();
                string result = reader.GetString(0);
                ddlTesting.SelectedValue = result;
                ddlTesting.AppendDataBoundItems = true;
            }
        }
    }
    finally
    {
        conn.Close();
    }

答案 1 :(得分:0)

问题在于以下行:

ddlTesting.Items.FindByValue("Testing").Selected = true;

您必须使用数据表值中存在的某些值,而不是在硬代码中使用列名"Testing"

这样,上面的代码执行时没有错误,数据绑定没有变化。