У меня есть два раскрывающихся списка ddlCountry и ddlState и одна кнопка «Отправить».
Пока ddlstate находится на панели обновления.
При отправке значения кнопки обоих раскрывающихся списков сохраняется в базе данных.
И я показываю данные в Repeater Control.( В структуре таблицы HTML) КОД ASPX
<table id="tablelist" class="csstablelist" cellspacing="1" cellpadding="1">
<tr>
<td class="csstablelisttoptr">
ddlCountryID
</td>
<td class="csstablelisttoptr">
ddlCountryText
</td>
<td class="csstablelisttoptr">
ddlstateText
</td>
</tr>
<asp:Repeater ID="repeaterList" runat="server" OnItemDataBound="repeaterList_ItemDataBound">
<ItemTemplate>
<tr onclick="selectRow(this);">
<td class="csstablelisttd" style="display: none">
<asp:Label ID="ddlCountryID" runat="server" Text='<%#Eval("ddlCountryID")%>'></asp:Label>
</td>
<td class="csstablelisttd">
<asp:Label ID="ddlCountryText" runat="server" Text='<%#Eval("ddlCountryText")%>'></asp:Label>
</td>
<td class="csstablelisttd">
<asp:Label ID="ddlstateText" runat="server" Text='<%#Eval("ddlstateText")%>'></asp:Label>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<asp:DropDownList ID="ddlCountry" runat="server" CssClass="csstextbox" Width="207px" AutoPostBack="true" OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged">
</asp:DropDownList>
<asp:UpdatePanel ID="updatePanelState" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlState " runat="server" CssClass="csstextbox" Width="177px">
</asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlCountry" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnSave" runat="server" Width="80px" OnClientClick="return validateForm();" Text="Save" CssClass="cssbutton" OnClick="btnSave_Click" />
ddlCountryID | ddlCountryText | ddlstateText
1 | USA | XYZ
2 |India | PQR
По щелчку TR я пишу ниже (SelectRow(this)) функцию в javascript для выделения значения повторителя и значения раскрывающегося списка и их выбора.
<script type="text/javascript">
function selectRow(objTR)
{
var ddlCountry =document.getElementById('<%=ddlCountry.ClientID %>');
var ddlState =document.getElementById('<%=ddlState .ClientID %>');
for (i = 0; i < ddlCountry .options.length; i++)
{
if (ddlCountry .options[i].text == objTR.cells[1].innerText.trim())
break;
}
ddlCountry .options[i].selected = true;
__doPostBack(ddlCountry .id, objTR.cells[2].innerText.trim());
}
</script>
Я пишу ddlCountry SelectedIndexChangedEvent в коде позади.
Из Javascript я запускаю __doPostBack() и передаю ddlCountry в качестве цели события ddlStateText в качестве аргумента события для SelectedIndexChangedEvent и получаю значение в подобном событии.
string stateDescription = Request["__EVENTARGUMENT"];
ddlState .Items.FindByText(stateDescription ).Selected = true;//for highliting the repeater value and dropdown value match and selected
Страна привязки на страницеЗагрузить
if(!Ispostback)
protected Void BindCountry()
{
strSQL = @"SELECT countryID,Country from Country_Master";
DataTable dataTableCountry = null;
dataTableCountry = objSqlDbComm.ExecuteDatasetQuery(strSQL).Tables[0];
int countryID;
string Country;
var dictioneryCountry = new Dictionary<int, string>();
foreach(DataRow dr in dataTableCountry.Rows)
{
countryID = Convert.ToInt32(dr["countryID"]);
Country= dr["Country"].ToString();
dictioneryCountry.Add(countryID,Country);
}
ddlCountry.Items.Clear();
ddlCountry.DataTextField = "Value";
ddlCountry.DataValueField = "Key";
ddlCountry.DataSource = dictioneryCountry;
ddlCountry.DataBind();
ddlCountry.Items.Insert(0, new ListItem("[Select]", "-1"));
ddlCountry.Items[0].Selected = true;
}
Моя проблема в том, что у меня есть следующие данные ретранслятора.
ddlCountryID | ddlCountryText | ddlstateText
1 | USA | XYZ
2 |India | PQR
2 |India | MNO
Когда я выбираю строку номер 3, в которой есть страна Индия и состояние mno, тогда метод __dopostback() срабатывает.
Когда я перехожу к строке номер 1, метод __dopostback() срабатывает.
Когда я перехожу из строки с номером 1 в 3, тогда метод срабатывает правильно, но когда я перехожу из строки с номером 3 в строку 2 с идентификатором страны, тот же метод __dopostback() не срабатывает, и состояние не выбирается из ddlstate.