【问题标题】:Retrieve the selected values which are stored in database检索存储在数据库中的选定值
【发布时间】:2020-04-11 20:28:41
【问题描述】:

使用此代码,我将使用复选框填充下拉列表以进行多选,

sql = @String.Format(" SELECT p FROM `dotable`; ");
using (OdbcConnection cn =
      new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
{
  using (OdbcCommand cmd = new OdbcCommand(sql, cn))
  {
    cmd.CommandType = CommandType.Text;
    cmd.Connection.Open();
    using (OdbcDataAdapter sda = new OdbcDataAdapter(cmd))
    {
      using (DataTable dt = new DataTable())
      {
        sda.Fill(dt);
        pddl.DataSource = dt;
        pddl.DataTextField = "p";
        pddl.DataValueField = "p";
        pddl.DataBind();
      }
    }
  }
}

我需要将存储在数据库中的值与填充下拉列表的表的值进行比较。

如果存储在数据库中的值等于下拉列表中的值,则选中相应的复选框。

在下拉列表中我有:

Peter
Mike
Myriam
Roger
Marilyn
Barbara

关于存储的数据库:

Mike; Marilyn;

我尝试了这个解决方案但没有成功,因为在 DropDownList 中未选中相应复选框的值。

using (OdbcCommand cmd = new OdbcCommand(sql, cn))
{
  cmd.CommandType = CommandType.Text;
  cmd.Connection.Open();
  OdbcDataReader dr = cmd.ExecuteReader();
  while (dr.Read())
  {
    string p = dr["p"].ToString();
    string[] w = reader["w"].ToString().Split(';');
    foreach (string x in w)
    {
      foreach (ListItem item in pddl.Items)
      {
        if (x.ToString().Trim() == p.ToString().Trim())
        {
          Response.Write(x.ToString().Trim() + " >>> " + p.ToString().Trim() + "<br />");
          item.Selected = true;
        }
      }
    }
  }
}

有什么想法吗?

第一次编辑

我已经试过了:

string[] w = reader["w"].ToString().Split(';');
foreach (string x in w)
{
    while (dr.Read())
    {
        string p = dr["p"].ToString();

        Response.Write("p = " + p.ToString() + "<br />");
        Response.Write("w = " + x.ToString().Trim() + "<br /><br />");

        if (x.ToString().Trim() == p.ToString().Trim())
        {
            foreach (ListItem item in pddl.Items)
            {
                Response.Write(x.ToString().Trim() + " >>> " + p.ToString().Trim() + "<br />");
                item.Selected = true;
            }
        }
    }
}

但是输出是:

p = Peter
x = Mike

p = Mike
x = Mike

p = Myriam
x = Mike

p = Roger
x = Mike

p = Marilyn
x = Mike

p = Barbara
x = Mike

在变量“p”上,我有下拉列表中的所有值。

在变量“x”上,我存储了数据库中的所有值。

但在变量 'x' 上,我只有值 'Mike' 而不是值 'Miryam'。

有什么想法吗?

【问题讨论】:

  • 也许下拉列表中的列表会更正确地存储在数据库中?这也将允许您编写一个查询来获取名称以及 IsSelected 属性,您可以将其数据绑定到您的控件
  • @NeutralHandle 感谢您的回复,请查看我的编辑问题。

标签: c# asp.net split


【解决方案1】:

因为我的这段代码运行良好。

.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <br />
            <asp:DropDownCheckBoxes ID="pddl" runat="server" UseSelectAllNode="false">
                <Style SelectBoxWidth="160" DropDownBoxBoxWidth="200" DropDownBoxBoxHeight="200" />
                <Items>
                    <asp:ListItem Text="Peter" Value="Peter" />
                    <asp:ListItem Text="Mike" Value="Mike" />
                    <asp:ListItem Text="Myriam" Value="Myriam" />
                    <asp:ListItem Text="Roger" Value="Roger" />
                    <asp:ListItem Text="Marilyn" Value="Marilyn" />
                    <asp:ListItem Text="Barbara" Value="Barbara" />
                </Items>
            </asp:DropDownCheckBoxes>
        </div>
    </form>
</body>
</html>

.cs

using System;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string data = "Mike; Marilyn;";
        string[] words = data.Split(';');

        foreach (string word in words)
        {
            if (!String.IsNullOrEmpty(word.ToString().Trim()))
            {
                Response.Write("database stored value = " + word.ToString().Trim() + "<br />");
                foreach (System.Web.UI.WebControls.ListItem item in pddl.Items)
                {
                    Response.Write("DropDownCheckBoxes value = " + item.Text + "<br />");
                    if (item.Text.ToString().Trim() == word.ToString().Trim())
                    {
                        item.Selected = true;
                    }
                }
            }
        }
    }
}

输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2014-08-29
    • 2019-08-04
    • 2017-12-30
    • 2016-10-10
    • 2015-04-26
    • 2020-07-23
    相关资源
    最近更新 更多