2012-02-17 69 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属性或使用相同的投和指数的字符串。您选择的索引将在后续回复中保留。