Dropdownlist回发中的选定值

时间:2012-02-17 11:09:47

标签: c# asp.net

我有2个下拉列表(ddl1,ddl2)和一个带有2个下拉列表的网格视图(gddl1,gddl2)。在ddl1的SelectedIndexChanged事件中,我在回发中更改了gddl1的SelectedIndex

我的问题是 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;
    }
}

3 个答案:

答案 0 :(得分:1)

这里的问题是同步及其获取位置和绑定位置,但您也可以使用Request.Form直接获取值。

Request.Form[DropDownListID.UniqueID]

答案 1 :(得分:0)

我不确定我是否理解您的问题,因为很难看到ddl1ddl2gddl1等等以及何时处理每个事件。

但我的猜测是:

  • DataBind您的GridView在btnProceed_Click
  • 仅在RowDataBound
  • 中绑定GridView的两个DropDownLists

然后根据所选的ddl1

值,您的“GridView-DropDownLists”始终是最新的

答案 2 :(得分:0)

你可以通过将它们作为属性存储在viewstate中来保留ddl1和ddl2选择的索引。

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

上面的属性是字符串,你可以用类似的方式创建一个int属性,或者使用与string相同的转换索引。您选择的索引将在后续回发中保留。