Dropdownlist回发中的选定值

本文关键字:Dropdownlist | 更新日期: 2023-09-27 18:24:53

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

我的问题是ddl1.databind()发生在按钮的单击事件处。因此,一旦ddl1的选定索引发生变化,选定的值就会丢失并返回到初始值。

我不能使用!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;
    }
}

Dropdownlist回发中的选定值

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

Request.Form[DropDownListID.UniqueID]

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

但我的猜测是:

  • 数据绑定btnProceed_Click中的GridView
  • 仅在RowDataBound中绑定GridView的两个DropDownList

然后,根据ddl1 的选定值,您的"GridView DropDownLists"始终是最新的

您可以通过将ddl1和ddl2所选索引作为属性存储在视图状态中来保留它们。

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

上面的属性在字符串中,您可以以类似的方式创建int属性,也可以使用与字符串相同的并强制转换索引。您选择的索引将在后续回发时保留。