台灣最大程式設計社群網站
線上人數
1265
 
會員總數:241127
討論主題:186800
歡迎您免費加入會員
討論區列表 >> C# >> 如何在Dropdownlist的選擇項目變更時, 執行一些動作?
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何在Dropdownlist的選擇項目變更時, 執行一些動作?
價值 : 30 QP  點閱數:227 回應數:10

樓主

Sanji
門外漢
0 23
335 62
發送站內信

各位大大
小弟目前有兩個相關的dropdownlist
我希望當第一個dropdownlist(艙位)選擇第五個選項時
第二個dropdownlist(票種)可以自動產生預設值 不用選擇就可以變成第五個選項


以下是網頁兩個相關的dropdownlist 的code
<td align="center">艙   等</td>
<asp:DropDownList ID="ddlCabinLevel" runat="server" OnSelectedIndexChanged="ddlCabinLevel_SelectedIndexChanged" AutoPostBack="true" /> &nbsp;
<asp:RequiredFieldValidator id="rv3" ControlToValidate="ddlCabinLevel"
Display="Dynamic" runat="server" Text="請選艙等" CssClass="validate_msg" ValidationGroup="Edit" />

<td align="center">票   種</td>
<asp:DropDownList ID="ddlTicketID" runat="server" OnSelectedIndexChanged="ddlTicketID_SelectedIndexChanged" AutoPostBack="true" /> &nbsp;

而相對應的函式code如下
protected void ddlCabinLevel_SelectedIndexChanged(object sender, EventArgs e)
{
GetTicketIDs();
SetControlFocus(ddlCabinLevel.ClientID, false);
}

protected void ddlTicketID_SelectedIndexChanged(object sender, EventArgs e)
{
GetTicketIDs();
SetControlFocus(ddlTicketID.ClientID, false);
}

private void GetTicketIDs()
{
OrderDetailInfo od = OrderDetail;
IDataReader dr = OrderBLL.GetTicketPrices(ddlCabinLevel.SelectedValue,
od.From_place, od.To_place, departDate, ComID, Globals.ConnectionString);
//custId :身分證字號(txtIDNo)
string custId = txtIDNo.Text.Trim();
string lastTicketId = "";
//找出訂票的ticket_id
if (!string.IsNullOrEmpty(custId))
lastTicketId = OrderBLL.lastTicketOrderedForWaiting(custId, od.From_place, od.To_place, Globals.ConnectionString);
string selectedValue = ddlTicketID.SelectedValue;

ddlTicketID.Items.Clear();
ListItem item;
while (dr.Read())
{
string ticketID = dr["ticket_id"].ToString();
item = new ListItem(string.Format("{0}-{1}-{2}", dr["obj_key"],
dr["obj_name"], dr["price"]), ticketID);
if (ticketID == lastTicketId)
{
item.Selected = true;
}
if (ticketID == selectedValue) item.Selected = true;
ddlTicketID.Items.Add(item);
if (ticketID == "01") AdultPrice = Convert.ToInt32((long)dr["price"]);
}
dr.Close();
if (ddlTicketID.Items.Count == 0)
//throw CreateNewException("查無票種!");
{ ShowMessage("查無票種!", true); return; }
SetPrice();
}
我做了很多其中的判斷
可是都會報錯
所以我真的沒找到該怎麼改它
就上來請問各位大大


搜尋相關Tags的文章: [ C# ] , [ ASP ] ,
本篇文章發表於2017-09-08 21:33
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

Sanji
檢舉此回應
重新排版看看~

本篇文章回覆於2017-09-08 21:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小魚
檢舉此回應
如果要用PostBack的話,
你要去了解它的流程,
我實際run過發現會先從Page_Load開始跑,
不是只跑那個OnChange事件而已,
最好是一步一步debug去發現問題,

或是也可以用前端JavaScript的方法,
不用到後端。
本篇文章回覆於2017-09-08 23:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Sanji
檢舉此回應
請問小魚大大
那如何用用前端的方法
是單純加條件如此嗎
本篇文章回覆於2017-09-09 00:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Sanji
檢舉此回應
因為主要 在GetTicketIDs()這裡面


item就是要呈現出來的資料
我就想說有沒有辦法 讓item的其中一個值變成預設
本篇文章回覆於2017-09-09 01:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

小魚
檢舉此回應
目前不是很了解你的需求,
可以舉個具體的例子嗎?
本篇文章回覆於2017-09-09 08:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

Sanji
檢舉此回應
就是現在有兩個dropdownlist

第一個ddl 選項假設有五個
而第二個ddl 的選項會根據第一個ddl來決定總共有幾個(而預設都是第一個)

我希望能呈現的是
當第一個ddl選第五個選項時
第二個ddl 抓完所有選項值後 預設先設為第五個
本篇文章回覆於2017-09-09 11:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

小魚
檢舉此回應
1.所以第二個選項來源是哪裡?來自資料庫?
2.所以你已經可以抓資料庫的資料了嗎?
3.前端改變下拉選單的方式可參考 動態下拉式選單 試試看
4.如果要從後端改變,可以參考 下拉選單DropDownList範例
5.另外還有這一篇,應該可以解決你的問題 DropDownList小技巧
6.針對語法部分還有問題,可以善用Google
本篇文章回覆於2017-09-09 15:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

Sanji
檢舉此回應
回小魚大大
1.資料庫
2.已經抓得到了
謝謝小魚大大的回覆 我會看的
本篇文章回覆於2017-09-09 18:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

Sanji
檢舉此回應
回小魚大大
1.資料庫

2.抓得到資料了

3.5我再看看

4. 那篇我參考過了 可是 appenddatabounditems 這個指令會對第一個ddl的所有選項作預設
我只要第一個ddl選到第五個選項 才讓第二個ddl做預設
本篇文章回覆於2017-09-09 18:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

小魚
檢舉此回應
如果你只要第五個,
那就要在 OnSelectedIndexChanged 的事件裡面加入判斷
本篇文章回覆於2017-09-09 21:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.