Listbox возвращает пустую строку в событии SelectedIndexChanged
Вышеуказанная ошибка возникает при событии щелчка SelectedIndexChanged в списке.
в отладке возвращается значение "", однако, когда вы смотрите на исходный код веб-страницы, определенно есть значения.
Вот мой список:
<asp:ListBox ID="lstBxMyList" runat="server" CssClass="binorderlst1"
DataTextField="myName"
DataValueField="myID"
OnSelectedIndexChanged ="lstBxMyList_SelectedIndexChanged"
AutoPostBack="true" Rows="10">
</asp:ListBox>
Вот событие:
protected void lstBxMyList_SelectedIndexChanged(object sender, EventArgs e)
{
myID = Convert.ToInt32(lstBxSiteList.SelectedValue.ToString());
... rest of code
}
Для полноты вот привязка данных:
private void BindLstBxMyList(int myOtherID)
{
DataTable dt = new DataTable();
SqlConnection conn;
SqlCommand comm;
using (conn = new SqlConnection(aSHconns.aconn))
{
comm = new SqlCommand("myStoredProc", conn);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add(new SqlParameter("@myOtherID", SqlDbType.Int));
comm.Parameters["@myOtherID"].Value = myOtherID;
SqlDataAdapter sqlDa = new SqlDataAdapter(comm);
try
{
conn.Open();
sqlDa.Fill(dt);
if (dt.Rows.Count > 0)
{
lstBxMyList.DataSource = dt;
lstBxMyList.DataTextField = "myName";
lstBxMyList.DataValueField = "myID";
lstBxMyList.DataBind();
}
}
finally
{
conn.Close();
}
}
}
Если я вернусь обратно к SqlDataSource, список возвращает значения. Bt мне нужно снова заполнить список, поэтому мне нужен код для databind (если, конечно, нет лучшего способа)
Так почему же выбранное значение из списка возвращает пустую строку? Любая помощь будет принята с благодарностью.
1 ответ
У вас есть свойство AutoPostBack = "True", это сделает постбэк по каждому измененному индексу. Таким образом, прежде чем перейти к событию Выбранный индекс изменен, он должен нажать на страницу загрузки, где вы привязываете свой список. Таким образом, когда он достигает загрузки страницы, выбранный индекс будет изменен на элемент по умолчанию. Итак, попробуйте следующий код.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Bind your listbox here
}
}