Получить выбранные значения, которые хранятся в базе данных - PullRequest
1 голос
/ 11 апреля 2020

С помощью этого кода я заполняю раскрывающийся список с флажком для множественного выбора,

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'.

Есть идеи?

1 Ответ

1 голос
/ 12 апреля 2020

Для меня этот код работает хорошо.

.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;
                    }
                }
            }
        }
    }
}

Выход

enter image description here

...