Christopher Fernandes Ответов: 2

Asp.net выпадающий список веб - форм не изменяет выбранное значение


У меня есть этот код ниже, который я использую, чтобы изменить выбранное значение dropdownlist. Эти элементы выпадающего списка не привязаны к данным, и я добавил к ним элементы во время разработки.

if (dataTable.Rows.Count > 0 && dataTable.Columns.Count > 0)
{
  if (dataTable.Rows[0]["IsSpeechActive"].ToString().Equals(bool.TrueString)) { chkSpeechActive.Checked = true; } else { chkSpeechActive.Checked = false; }
  ddlSL1.SelectedValue = dataTable.Rows[0]["Value1"].ToString(); //en-us
  ddlSL2.SelectedValue = dataTable.Rows[0]["Value2"].ToString(); //1.0
  ddlSL3.SelectedValue = dataTable.Rows[0]["Value3"].ToString(); //1.5
  ddlSL4.SelectedValue = dataTable.Rows[0]["Value4"].ToString(); //default
  ddlSL5.SelectedValue = dataTable.Rows[0]["Value5"].ToString(); //0.5
}
else
{
  ShowMessage("Could not find user speech details");
}


<asp:DropDownList ID="ddlSL5" CssClass="cm-input-dataform-select cm-input-font" runat="server">
  <asp:ListItem Text="0.0" Value="0.0"></asp:ListItem>
  <asp:ListItem Text="0.1" Value="0.1"></asp:ListItem>
  <asp:ListItem Text="0.2" Value="0.2"></asp:ListItem>
  <asp:ListItem Text="0.3" Value="0.3"></asp:ListItem>
  <asp:ListItem Text="0.4" Value="0.4"></asp:ListItem>
  <asp:ListItem Text="0.5" Value="0.5"></asp:ListItem>
  <asp:ListItem Text="0.6" Value="0.6"></asp:ListItem>
  <asp:ListItem Text="0.7" Value="0.7"></asp:ListItem>
  <asp:ListItem Text="0.8" Value="0.8"></asp:ListItem>
  <asp:ListItem Text="0.9" Value="0.9"></asp:ListItem>
  <asp:ListItem Text="1.0" Value="1.0"></asp:ListItem>
</asp:DropDownList>


В приведенном выше коде первый выпадающий список работает нормально, но другие не меняют значение на то, которое я извлекаю из БД и устанавливаю для них.

Пожалуйста, посоветуйте, что случилось? Странная это ошибка.

Что я уже пробовал:

Я удалил его asp.net веб-форма и воссоздание ее.

2 Ответов

Рейтинг:
10

Christopher Fernandes

Этот код ниже решил эту проблему

string value = ""; decimal rowvalue;
rowvalue = decimal.Parse(dataTable.Rows[0]["Value5"].ToString());
value = Convert.ToString(rowvalue.ToString("0.0"));
if (ddlSL5.Items.FindByValue(value) != null) { ddlSL5.Items.FindByValue(value).Selected = true; }


Рейтинг:
1

Vincent Maverick Durano

Во-первых, если вы предварительно выбираете значения в SelectedIndexChanged случае DropDownList, то вам нужно установить AutoPostback к истине чтобы вызвать SelectedIndexChanged событие.

Во-вторых, если вы связываете и делаете предварительный отбор в Page_Load событие, а затем убедитесь, что вы обернули свой код внутри !IsPostback блок.

В-третьих, попробуйте сделать что-то вроде этого, чтобы предварительно выбрать значение на основе данных в вашей базе данных:

ListItem item = ddlSL5.Items.FindByValue(dataTable.Rows[0]["Value5"].ToString());
if (item != null){
     	ddlSL5.ClearSelection();
     	item.Selected = true;
}


Сделайте то же самое для остальных ваших детей. DropDownLists.


Christopher Fernandes

Все элементы списка во всех выпадающих списках добавляются во время разработки. Нет никакого события привязки данных и изменения индекса, которое я использую в этой форме. Только попытка выбрать значения во всем выпадающем списке с тем, что извлекается из таблицы базы данных при загрузке страницы & update button click event.

Vincent Maverick Durano

Предоставленный код не имеет значения, были ли вы добавлены элементы во время разработки. Вы пробовали это сделать?

Christopher Fernandes

Сейчас я пробую этот код

строковое значение = dataTable.Строки[0]["Value5"].Метод toString();
if (ddlSL5.Предметы.FindByValue(value) != null) { ddlSL5.Предметы.FindByValue(значение).Selected = true; }

Даже это не работает. Это потому, что элементы списка жестко закодированы и не привязаны к базе данных в раскрывающемся списке.

Christopher Fernandes

приведенный выше код не работает

Vincent Maverick Durano

В чем же заключается ценность value переменная? имеет ли значение ваша value переменная существует в одном из ваших выпадающих списков?

Christopher Fernandes

Это временная строковая переменная для проверки того, какое значение извлекается из базы данных.

Vincent Maverick Durano

Какая ценность хранится в нем? Вы пробовали его отладить?

Christopher Fernandes

Код не работает, потому что тип datarow в datatable является десятичным. Он работает только для текстовых значений, см. вопрос и комментируемую часть.