Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Причина возвращение ListBox.SelectedIndex значение 0

88K
12 февраля 2013 года
Alexei Saharov
2 / / 12.02.2013
Всем привет!

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

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

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

Привожу серверный код:


Код:
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();
    }
И код разметки:

Код:
<%@ 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>
88K
14 февраля 2013 года
Alexei Saharov
2 / / 12.02.2013
Проблема была в не уникальности ключа ListBox, из-за которого выбирался всегда первый айтем с тем-же ключём.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог