2 つのドロップダウン ddlCountry と ddlState と 1 つの送信ボタンがあります。
ddlstate が更新パネルにある間。
データベース内の両方のドロップダウン ストアのボタン値の送信時。
そして、Repeater Control でデータを表示します。(HTML テーブル構造で) ASPX CODE
<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
リピーター値とドロップダウン値の一致を強調表示して選択するための JavaScript の TR i write below (SelectRow(this)) 関数の Onclick。
<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() を起動し、イベント ターゲット ddlStateText として ddlCountry を SelectedIndexChangedEvent のイベント引数として渡し、このようなイベントで値を取得しています。
string stateDescription = Request["__EVENTARGUMENT"];
ddlState .Items.FindByText(stateDescription ).Selected = true;//for highliting the repeater value and dropdown value match and selected
pageLoad で国をバインドする
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
国インドと州 mno を持つ行番号 3 を選択すると、__dopostback() メソッドが起動します。
行番号 1 に移動すると、__dopostback() メソッドが起動します。
行番号 1 から 3 に移動すると、メソッドは正しい方法で実行されますが、国 ID が同じ __dopostback() メソッドを持つ行番号 3 から 2 に移動すると、メソッドは実行されず、状態は ddlstate から選択されません。