2012-02-17 34 views
0

我有2個下拉列表(ddl1,ddl2)和一個帶有2個下拉列表(gddl1,gddl2)的gridview。在SelectedIndexChanged ddl1事件正在更改gddl1的SelectedIndex回發。Dropdownlist在回發中的選定值

我的問題是 ddl1.databind()發生在按鈕的單擊事件。因此,一旦ddl1的selectedIndex發生變化,所選值將丟失並返回初始值。

我不能使用!IsPostback,因爲我在按鈕單擊時綁定ddl1。 如何保留ddl1和ddl2選定的索引。

protected void btnProceed_Click(object sender, EventArgs e) 
{ 
    if(ddlLocation.SelectedIndex > -1) { 
     empDS = ws_service.GetEmpList(ddlLocation.SelectedValue, ((ddlDept.SelectedValue == "All") ? "" : ddlDept.SelectedValue), ((ddlGrade.SelectedValue == "All") ? "" : ddlGrade.SelectedValue)); 
     appraiserDS = ws_service.GetAppList(); 
     grdDetails.DataSource = empDS.Tables[ 0 ].DefaultView; 
     grdDetails.DataBind(); 

     ddlAppraiserAll.DataSource = appraiserDS.Tables[ 0 ].DefaultView; 
     ddlAppraiserAll.DataTextField = "APPRAISER_NAME"; 
     ddlAppraiserAll.DataValueField = "APPRAISER_ID"; 
     ddlAppraiserAll.DataBind(); 
    } 
} 


protected void ddlAppraiserAll_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    foreach(GridViewRow gvRow in grdDetails.Rows) { 
     Control ctrl = gvRow.FindControl("ddlAppraiserId"); 
     DropDownList ddl = ctrl as DropDownList; 
     if(ddl != null) 
      ddl.SelectedIndex = ddlAppraiserAll.SelectedIndex; 
    } 
} 
+0

向我們顯示您的代碼。 – 2012-02-17 11:12:24

+0

我已更新我的代碼。 – itzArun 2012-02-17 11:21:34

+0

@ itzArun:嘗試使用更新面板與異步回發 – Rocky 2012-02-17 12:12:46

回答

1

這裏的問題是同步和你在哪裏得到它,在那裏你綁定它,但你也可以直接使用Request.Form獲得的價值。

Request.Form[DropDownListID.UniqueID] 
0

我不知道如果我理解你的問題,因爲它很難看到有什麼ddl1ddl2gddl1等,並在每個事件進行處理。

但我的猜測是:

  • 的DataBind您在btnProceed_Click
  • GridView控件綁定在GridView的兩個DropDownLists只在RowDataBound

那麼你的 「的GridView,DropDownLists」 總是向上根據所選值的最新值ddl1

+0

'ddlAppraiserAll'在gridview之外。我綁定了'btnProceed_Click'並綁定了Gridview'grdDetails'。 Gridview有2個下拉列表('ddlAppraiserId,ddlReviewerId')。在RowDataBound事件中綁定這些下拉列表。 我想通過更改'ddlAppraiserAll'來更改gridview的下拉菜單'ddlAppraiserId'的selectedindex。 'ddlAppraiserId'的選定值是正確的,但'ddlAppraiserAll'的'SelectedIndex'在回發後不會保留。 – itzArun 2012-02-17 12:23:09

+0

@itzArun:我們正在交叉討論。如果我正確理解你,你需要根據ddlAppraiserAll的SelectedValue來設置'ddlAppraiserId',是不是?然後我的建議是在RowDataBound中考慮綁定'ddlAppraiserId'時考慮到這一點。當ddlAppraiserAll的SelectedIndex改變後,GridView被綁定時,ddlAppraiserId會自動擁有正確的項目。 **最後**:你綁定ddlAppraiserAll page_load還回傳?你只能在'btnProceed_Click'中綁定'if(!IsPostBack)'**和**。那麼它將保持其價值。 – 2012-02-17 12:36:18

0

您可以保留ddl1和ddl2選定的索引通過將它們作爲屬性存儲在視圖狀態中。

 private string ddlSelectedIndex 
    { 
     set { ViewState["SelectedIndex"] = value; } 
     get { return ViewState["SelectedIndex"] == null ? string.Empty : ViewState["SelectedIndex"].ToString(); } 
    } 

以上屬性是字符串,您可以創建類似的方式有一個int屬性或使用相同的投和指數的字符串。您選擇的索引將在後續回覆中保留。