2015-07-22 55 views
1

我有一種情況,我需要SelectedIndexChanged以編程方式選擇項目時觸發。這是我正在做的。設置選定的值不會觸發SelectedIndexChanged

我對FormLoad從數據庫裝載一個下拉列表,我倒基於查詢字符串傳遞這樣的信息設置下降的值:

if (Request.QueryString["nat"] != null) 
{ 
    ddlTriggers.ClearSelection(); 
    ddlTriggers.Items.FindByValue(
      Request.QueryString["nat"].ToString()).Selected = true; 
} 

這不,因爲它需要的正常工作來自查詢字符串的id並將其匹配到下拉菜單中的特定項目。問題是僅僅通過設置.selected=true不會觸發selectedIndexChanged事件。我試圖在選定索引更改時設置一些標籤。

一些建議表現出手動調用selectedIndexChanged這樣的:

ddlCommonTasks_SelectedIndexChanged(ddlTriggers, EventArgs.Empty); 

但隨後即重置selectedIndex和顯示我在下降的第一個項目下降,這當然是犯規幫助我的任何標籤。

有任何建議。

+0

你怎麼樣轉移您將SelectedIndexChanged事件內部的代碼執行到一個方法中,然後調用SelectedIndexChanged事件內部的方法以及以編程方式更改選擇內容的方法的末尾? –

回答

1

問題是您正在更改post post上的選定索引k或在服務器上加載頁面。該活動不會開火。你可以做的是採取的東西在SelectedIndexChanged處理程序,並將其重構爲單獨的方法,它可以被稱爲每當更新值,如:

ddlCommonTasks_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var ddl = sender as DropDownList; 
    PerformIndexChangedAction(ddl); 
} 

private void PerformIndexChangedAction(DropDownList ddl) 
{ 
    lblTest.Text=ddl.SelectedItem.Text; 
} 

修改代碼如下:

var nat = Request.QueryString["nat"]; 
if (!String.IsNullOrWhitespace(nat)) 
{ 
    ddlTriggers.ClearSelection(); 
    ddlTriggers.Items.FindByValue(nat).Selected = true; 
    PerformIndexChangedAction(ddlTriggers); 
} 
+0

不錯的答案。這現在總是有意義的。我沒有意識到,如果在回發時設置下拉不會觸發selectedIndexChanged。我將更新代碼並讓您知道它是如何發生的! – logixologist

1

如果我正確地假設你已經爲selectedIndexChanged事件註冊了一個處理程序,那麼你可以簡單地調用你註冊爲事件處理程序的相同函數。

如果您註冊了您的處理程序是這樣的:

$(".target").change(function() { 
    alert("Handler for .change() called."); 
}); 

您可以改爲其他地方定義函數,並傳遞:

function handler() { 
    alert("Handler for .change() called."); 
} 

$(".target").change(handler); 

現在,在您現有的代碼只是調用處理功能:

if (Request.QueryString["nat"] != null) 
{ 
    ddlTriggers.ClearSelection(); 
    ddlTriggers.Items.FindByValue(Request.QueryString["nat"].ToString()).Selected = true; 
    handler(); 
} 
+0

但是,有趣的回答假設我正在使用jQuery。這是一個特定的C#問題。我從來沒有註冊我的處理程序,這可能是爲什麼它沒有按預期工作。 – logixologist

相關問題