powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ListBox.SelectedIndex всегда возвращает 0
9 сообщений из 9, страница 1 из 1
ListBox.SelectedIndex всегда возвращает 0
    #38148589
AlxReiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

На страничке есть 4 контрола:
DropDownList - который заполняется из БД.
ListBox - который заполняется значениями из БД в зависимости от выбранного элемента в DrowDownList.
Button - который должен отображать в последнем элементе - Label - индекс выделенного элемента в ListBox.

Привязка к БД проходит на ура. Все контролы заполняются. DropDownList работает без нареканий. Но ListBox работает не так как ожидается.
При попытке узнать индекс выбранного элемента в листбоксе происходит сброс выбранного элемента на 0.

Подскажите, пожалуйста, что делать? Куда копать? Бьюсь уже не первый день... Предполагаю, что ошибка закралась где-то в PostBack или ViewState.

Привожу серверный код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
protected void Page_Init(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            bindDDL();

            string domainID = DropDownList1.SelectedItem.Value;
            string version = "1";

        }

    }

    protected void Page_Load(object sender, EventArgs e)
    {
        int indx = DropDownList1.SelectedIndex;
    }

    protected void bindDDL()
    {
        string connStr = ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString;

        SqlConnection dbSQLConnection = new SqlConnection(connStr);

        if (dbSQLConnection.State == ConnectionState.Closed)
        {
            dbSQLConnection.Open();
        }

        SqlCommand dbSqlCommand = new SqlCommand("SEL ECT domain_id, domain FR OM domains", dbSQLConnection);
        SqlDataAdapter dbSQLAdapter = new SqlDataAdapter(dbSqlCommand);
        DataSet dbDataSet = new DataSet();
        dbSQLAdapter.Fill(dbDataSet);

        DropDownList1.DataSource = dbDataSet;
        DropDownList1.DataTextField = "domain";
        DropDownList1.DataValueField = "domain_id";
        DropDownList1.DataBind();

        if (dbSQLConnection.State == ConnectionState.Open)
        {
            dbSQLConnection.Close();
        }
    }

   
    protected void lbDB(string domainID, string version)
    {
        string connStr = ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString;

        SqlConnection dbSQLConnection = new SqlConnection(connStr);

        if (dbSQLConnection.State == ConnectionState.Closed)
        {
            dbSQLConnection.Open();
        }

        SqlCommand dbSqlCommand = new SqlCommand("БОЛЬШОЙ БОЛЬШОЙ ЗАПРОС С ПОДСТАНОВКОЙ domainID И version", dbSQLConnection);
        SqlDataAdapter dbSQLAdapter = new SqlDataAdapter(dbSqlCommand);
        DataSet dbDataSet = new DataSet();
        dbSQLAdapter.Fill(dbDataSet);

        ListBox1.DataSource = dbDataSet;
        ListBox1.DataTextField = "func_name";
        ListBox1.DataValueField = "domain_id";
        ListBox1.DataBind();

        if (dbSQLConnection.State == ConnectionState.Open)
        {
            dbSQLConnection.Close();
        }
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string domainID = DropDownList1.SelectedItem.Value;
        string version = "1";

        lbDB(domainID, version);
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = ListBox1.SelectedIndex.ToString();
    }



И код разметки:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testPage.aspx.cs" Inherits="testPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<ht ml xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <fo rm id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" 
            onselectedindexchanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList>
        <asp:ListBox ID="ListBox1" runat="server" EnableViewState="true" ></asp:ListBox>
        <asp:Button ID="Button1" runat="server" Text="Button" onc lick="Button1_Click" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
</html>
...
Рейтинг: 0 / 0
ListBox.SelectedIndex всегда возвращает 0
    #38148605
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
<asp:Button ID="Button1" runat="server" Text="Button" onc lick="Button1_Click" />



Код: c#
1.
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
...
Рейтинг: 0 / 0
ListBox.SelectedIndex всегда возвращает 0
    #38148617
AlxReiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,

спасибо, но не в этом дело :(
...
Рейтинг: 0 / 0
ListBox.SelectedIndex всегда возвращает 0
    #38148620
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlxReiterМСУ, спасибо, но не в этом дело :(
В этом, ибо код стал рабочим.

view
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
    Inherits="WebApplication5._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ht ml xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" 
            onselectedindexchanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList>
        <asp:ListBox ID="ListBox1" runat="server" EnableViewState="true" ></asp:ListBox>
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
</html> 



codebehind
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
using System;
using System.Data;

namespace WebApplication5
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bindDDL();

                string domainID = DropDownList1.SelectedItem.Value;
                string version = "1";
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            int indx = DropDownList1.SelectedIndex;
        }

        protected void bindDDL()
        {
            DataSet dbDataSet = new DataSet();
            var table = new DataTable();
            dbDataSet.Tables.Add(table);
            table.Columns.Add("domain_id");
            table.Columns.Add("domain");
            table.Rows.Add("1", "Test1");
            table.Rows.Add("2", "Test2");
            table.Rows.Add("3", "Test3");

            DropDownList1.DataSource = dbDataSet;
            DropDownList1.DataTextField = "domain";
            DropDownList1.DataValueField = "domain_id";
            DropDownList1.DataBind();

        }


        protected void lbDB(string domainID, string version)
        {
            DataSet dbDataSet = new DataSet();
            var table = new DataTable();
            dbDataSet.Tables.Add(table);
            
            table.Columns.Add("domain_id");
            table.Columns.Add("func_name");

            table.Rows.Add(domainID, "FTest" + domainID);
            table.Rows.Add("7", "FTest7");
            table.Rows.Add("77", "FTest77");

            ListBox1.DataSource = dbDataSet;
            ListBox1.DataTextField = "func_name";
            ListBox1.DataValueField = "domain_id";
            ListBox1.DataBind();
        }

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string domainID = DropDownList1.SelectedItem.Value;
            string version = "1";

            lbDB(domainID, version);
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = ListBox1.SelectedIndex.ToString();
        }
    }
}

...
Рейтинг: 0 / 0
ListBox.SelectedIndex всегда возвращает 0
    #38148640
AlxReiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,

Удивительное дело. Ваш код работает. Спасибо :)
Но, подставив в Ваш код свое обращение к БД - снова поведение которое возвращает индекс 0.
Где же закралась ошибка...
...
Рейтинг: 0 / 0
ListBox.SelectedIndex всегда возвращает 0
    #38148642
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlxReiterГде же закралась ошибка...
Возможно где-то возвращается пустой датасет и т.п. Дебаг в руки.
...
Рейтинг: 0 / 0
ListBox.SelectedIndex всегда возвращает 0
    #38149093
AlxReiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ,

DataSet возвращается пустым. Но так ведь, и в вашем примере.
...
Рейтинг: 0 / 0
ListBox.SelectedIndex всегда возвращает 0
    #38150854
AlxReiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема была в неуникальности ключа ListBox, из-за которого выбирался всегда первый айтем с тем-же ключём.
...
Рейтинг: 0 / 0
ListBox.SelectedIndex всегда возвращает 0
    #38157075
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlxReiter,

Попробуйте сохранять значения во ViewState а потом из него считывать

Что то наподобие такого

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
private string domainID
    {
        get { return (string)ViewState["domainID"]; }
        set { ViewState["domainID"] = value; }
    }

private string version
    {
        get { return (string)ViewState["version"]; }
        set { ViewState["version"] = value; }
    }

private string SelectIndex
    {
        get { return (string)ViewState["SelectIndex"]; }
        set { ViewState["SelectIndex"] = value; }
    }

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        domainID = DropDownList1.SelectedItem.Value;
        version = "1";

        lbDB(domainID, version);
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        SelectIndex = ListBox1.SelectedIndex.ToString();
        Label1.Text = SelectIndex;
    }
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ListBox.SelectedIndex всегда возвращает 0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]