Причина возвращение ListBox.SelectedIndex значение 0
На страничке есть 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();
}
{
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>
<!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>
Проблема была в не уникальности ключа ListBox, из-за которого выбирался всегда первый айтем с тем-же ключём.