Как отобразить фиксированные данные в текстовом поле на основе каскадного выпадающего списка в C #?

Попробуйте следующее:

Определение таблицы:

DROP TABLE IF EXISTS category;
CREATE TABLE category (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20),
    parent_id INT,
    CONSTRAINT fk_category_parent FOREIGN KEY (parent_id)
    REFERENCES category (id)
) engine=innodb;

Экспериментальные строки:

INSERT INTO category VALUES
(19, 'category1', NULL),
(20, 'category2', 19),
(21, 'category3', 20),
(22, 'category4', 21),
(23, 'categoryA', 19),
(24, 'categoryB', 23),
(25, 'categoryC', 23),
(26, 'categoryD', 24);

Рекурсивная хранимая процедура:

DROP PROCEDURE IF EXISTS getpath;
DELIMITER $$
CREATE PROCEDURE getpath(IN cat_id INT, OUT path TEXT)
BEGIN
    DECLARE catname VARCHAR(20);
    DECLARE temppath TEXT;
    DECLARE tempparent INT;
    SET max_sp_recursion_depth = 255;
    SELECT name, parent_id FROM category WHERE id=cat_id INTO catname, tempparent;
    IF tempparent IS NULL
    THEN
        SET path = catname;
    ELSE
        CALL getpath(tempparent, temppath);
        SET path = CONCAT(temppath, '/', catname);
    END IF;
END$$
DELIMITER ;

Функция обертки для хранимой процедуры:

DROP FUNCTION IF EXISTS getpath;
DELIMITER $$
CREATE FUNCTION getpath(cat_id INT) RETURNS TEXT DETERMINISTIC
BEGIN
    DECLARE res TEXT;
    CALL getpath(cat_id, res);
    RETURN res;
END$$
DELIMITER ;

Выберите пример:

SELECT id, name, getpath(id) AS path FROM category;

Выход:

+----+-----------+-----------------------------------------+
| id | name      | path                                    |
+----+-----------+-----------------------------------------+
| 19 | category1 | category1                               |
| 20 | category2 | category1/category2                     |
| 21 | category3 | category1/category2/category3           |
| 22 | category4 | category1/category2/category3/category4 |
| 23 | categoryA | category1/categoryA                     |
| 24 | categoryB | category1/categoryA/categoryB           |
| 25 | categoryC | category1/categoryA/categoryC           |
| 26 | categoryD | category1/categoryA/categoryB/categoryD |
+----+-----------+-----------------------------------------+

Фильтрация строк определенным путем :

SELECT id, name, getpath(id) AS path FROM category HAVING path LIKE 'category1/category2%';

Выход:

+----+-----------+-----------------------------------------+
| id | name      | path                                    |
+----+-----------+-----------------------------------------+
| 20 | category2 | category1/category2                     |
| 21 | category3 | category1/category2/category3           |
| 22 | category4 | category1/category2/category3/category4 |
+----+-----------+-----------------------------------------+
0
задан Bogdan Doicin 3 March 2019 в 11:21
поделиться

1 ответ

Поскольку в вашем фрагменте есть метод Page_Load, я буду считать, что вы используете веб-формы asp.net. В этом случае вам просто нужно обработать событие, генерируемое компонентом DropDownList при его изменении.

Я ваш код на c #, вы должны создать метод для обработки события, выбранного в вашем DropDownList, что-то вроде этого:

protected void ItemSelected(object sender, EventArgs e)
{
    if (ddl3.SelectedItem.Value == "Yes")
    {
        // Change text box text
    }
}

И тогда вам просто нужно подключить обработчик событий к компоненту:

<asp:DropDownList ID="ddl3" runat="server" AutoPostBack="True" 
        onselectedindexchanged="ItemSelected">
    </asp:DropDownList>
0
ответ дан IPValverde 3 March 2019 в 11:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: