Как загрузить CheckBoxList из выбранного значения из DropDownList?

я пытаюсь сделать элемент базы данных дисплея (таблицы, строки, fk,...).

Я застрял на первых нескольких шагах. Я загрузил имена БД в DropDownList. Но я попытался загрузить таблицы из имени выбранной базы данных в CheckBoxList, но ничего не показывает.

Вот мои коды

aspx:

<form id = "form1" runat = "server" method = "get">
        <div>
            <asp:DropDownList ID = "drpListDBName" runat = "server" OnSelectedIndexChanged = "drpListDBName_SelectedIndexChanged">
            </asp:DropDownList>
        </div>
         <div>
             <asp:CheckBoxList ID = "chkListTable" runat = "server">
            </asp:CheckBoxList>
        </div>

aspx.cs:

    public static String dbname = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        String query = "SELECT * FROM SYS.sysdatabases WHERE name != 'master'" +
                        " and name != 'tempdb'" +
                        " and name != 'model'" +
                        " and name != 'msdb'" +
                        " and name != 'distribution'";
        Program.Connect();
        
        
        if (!Page.IsPostBack)
        {
            drpListDBName.DataSource = Program.ExecSqlDataReader(query);
            drpListDBName.DataTextField = "name";
            drpListDBName.DataBind();
        }    
    }

    protected void drpListDBName_SelectedIndexChanged(object sender, EventArgs e)
    {
        dbname = drpListDBName.SelectedValue.Trim();
        String query = "USE " + dbname +
            " SELECT * FROM SYS.tables" +
            " WHERE is_ms_shipped = 0";

        Program.Connect();

        if (chkListTable.Items.Count > 0)
            chkListTable.Items.Clear();
        chkListTable.DataSource = Program.ExecSqlDataReader(query);
        chkListTable.DataTextField = "name";
        chkListTable.DataBind();
        Response.Write(chkListTable);
    }

Я все еще новичок в asp.net. Заранее спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, а вы могли бы отправить свой второй выбор (список таблиц) в список флажков? (и если вам нужно выбрать несколько таблиц - возможно, да).

но, давайте сделаем один лучше. Давайте используем два поля со списком. Сначала выберите базу данных, заполните второе поле со списком таблицами.

Затем вы выбираете таблицу и отображаете таблицу в сетке.

Итак, сначала (возможно) используется строка подключения. Мы можем предположить, что вы построили или настроили хотя бы одну рабочую строку подключения к одной из баз данных на этом сервере sql.

Итак, проект->"настройки имени моего проекта".

Вы получаете это:

Итак, я уже сделал несколько, но обратите внимание на кнопку [...], если вы нажмете на нее, VS запустит для вас построитель соединений (красиво и просто). И вы можете проверить соединение.

Итак, мы просто начинаем с использования TEST4. (обратите внимание, что это ДЕЙСТВИТЕЛЬНО помещает строку подключения автоматически в веб-конфигурацию для вас).

Хорошо, давайте добавим поле со списком (чтобы выбрать базу данных).

А затем наш список флажков.

Итак, у нас есть такая разметка:

        <h4>Select Database</h4>
        <asp:DropDownList ID = "DropDownList1" runat = "server" Width = "177px"                
            DataTextField = "name"
            DataValueFeild = "name"     
            AutoPostBack = "true" OnSelectedIndexChanged = "DropDownList1_SelectedIndexChanged">
        </asp:DropDownList>

        <br />
        <asp:CheckBoxList ID = "CheckBoxList1" runat = "server"                
            DataTextField = "TABLE_NAME"
            DataValueField = "TABLE_NAME" >
        </asp:CheckBoxList>

И теперь у нас есть этот код:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadData();                
    }

    void LoadData()
    {
        Session["MyCon"] = Properties.Settings.Default.TEST4;

        string query = "SELECT * FROM SYS.sysdatabases WHERE name != 'master'" +
                    " and name != 'tempdb'" +
                    " and name != 'model'" +
                    " and name != 'msdb'" +
                    " and name != 'distribution'  ORDER BY Name";

        DropDownList1.DataSource = MyRst(query);
        DropDownList1.DataBind();
    }

    public DataTable MyRst(string strSQL)
    {
        var rst = new DataTable();
        using (SqlConnection conn = new SqlConnection((Session["MyCon"] as string)))
        {
            using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
            {
                conn.Open();
                rst.Load(cmdSQL.ExecuteReader());
            }
        }
        return rst;
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // set connecting string from TEST4 to whatever database selected

        string strCon = Session["MyCon"] as string;

        string strDB = DropDownList1.SelectedItem.Value;

        strCon = strCon.Replace("Initial Catalog = test4;", strDB);
        Session["MyCon"] = strCon;

        // now load check box list with all tables

        string strSQL = @"SELECT TABLE_NAME FROM [" + strDB + "].INFORMATION_SCHEMA.TABLES " +
                        "WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME";

        CheckBoxList1.DataSource = MyRst(strSQL);
        CheckBoxList1.DataBind();

    }

Итак, теперь мы получаем это:

Итак, да, вы можете установить таблицу данных в список флажков. Но в некоторых из моих баз данных довольно много таблиц - слишком длинные (много) флажки.

Итак, давайте изменим наш код на два поля со списком.

Однако нам нужно «пожалуйста, выберите» для полей со списком.

Итак, наша разметка теперь такая:

        <h4>Select Database</h4>
        <asp:DropDownList ID = "DropDownList1" runat = "server" Width = "180px"                
            DataTextField = "name"
            DataValueFeild = "name"     
            AutoPostBack = "true" OnSelectedIndexChanged = "DropDownList1_SelectedIndexChanged">
        </asp:DropDownList>

        <br />
        <h4>Select Table</h4>
        <asp:DropDownList ID = "DropDownList2" runat = "server" Width = "180"                
            DataTextField = "TABLE_NAME"
            DataValueField = "TABLE_NAME"
            AutoPostBack = "true" OnSelectedIndexChanged = "DropDownList2_SelectedIndexChanged"
            >
        </asp:DropDownList>

        <asp:GridView ID = "GridView1" runat = "server" CssClass = "table">

        </asp:GridView>

Наш код теперь такой:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadData();                
    }

    void LoadData()
    {
        Session["MyCon"] = Properties.Settings.Default.TEST4;

        string query = "SELECT * FROM SYS.sysdatabases WHERE name != 'master'" +
                    " and name != 'tempdb'" +
                    " and name != 'model'" +
                    " and name != 'msdb'" +
                    " and name != 'distribution'  ORDER BY Name";

        DropDownList1.DataSource = MyRst(query);
        DropDownList1.DataBind();
        DropDownList1.Items.Insert(0, new ListItem("Please Select", ""));

    }

    public DataTable MyRst(string strSQL)
    {
        var rst = new DataTable();
        using (SqlConnection conn = new SqlConnection((Session["MyCon"] as string)))
        {
            using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
            {
                conn.Open();
                rst.Load(cmdSQL.ExecuteReader());
            }
        }
        return rst;
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // set connecting string from TEST4 to whatever database selected
        string strCon = Session["MyCon"] as string;

        string strDB = DropDownList1.SelectedItem.Value;

        strCon = strCon.Replace("Initial Catalog = test4;", strDB);
        Session["MyCon"] = strCon;

        // now load 2nd cbo  box list with all tables

        string strSQL = @"SELECT TABLE_NAME FROM [" + strDB + "].INFORMATION_SCHEMA.TABLES " +
                        "WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME";

        DropDownList2.DataSource = MyRst(strSQL);
        DropDownList2.DataBind();
        DropDownList2.Items.Insert(0, new ListItem("Please Select", ""));
    }

    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
    {
        // send results to the Grid

        string strSQL = "SELECT * FROM [" + DropDownList2.SelectedItem.Value + "]";

        GridView1.DataSource = MyRst(strSQL);
        GridView1.DataBind();
    }

И теперь мы получаем это:

Итак, я использовал рабочую строку подключения к данной базе данных. Я в значительной степени предполагал, что одна и та же информация может и будет подключаться ко всем из них, поэтому я заменил имя базы данных TEST4 на любое, которое мы выберем.

Огромное спасибо. Это именно то, что мне нужно. Еще не нашел применения для второго решения, но я очень ценю его, и я буду использовать его в будущем. Хорошего дня.

pilog 07.05.2022 05:45

Другие вопросы по теме