如何保存选择后在下拉列表中选择的选项

本文关键字:选择 下拉列表 选项 保存 何保存 | 更新日期: 2023-09-27 18:03:40

我在GridView中显示列,其中一列是下拉列表。我希望能够保存下拉列表中选择的选项,只要选择的东西。我已经对其中一个有文本框的列做了这个,所以我希望对下拉列表做类似的事情。文本框和下拉列表的代码:

protected void gvPieceDetails_ItemDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.DataRow) {
        JobPieceSerialNo SerNo = e.Row.DataItem as JobPieceSerialNo;
        if (SerNo != null) {
            TextBox txtComment = e.Row.FindControl("txtComment") as TextBox;
            txtComment.Text = SerNo.Comment;
            txtComment.Attributes.Add("onblur", "UpdateSerialComment(" + SerNo.ID.ToString() + ", this.value);");
            DropDownList ddlReasons = (e.Row.FindControl("ddlReasons") as DropDownList);
            DataSet dsReasons = DataUtils.GetUnapprovedReasons(Company.Current.CompanyID, "", true, "DBRIEF");
            ddlReasons.DataSource = dsReasons;
            ddlReasons.DataTextField = "Description";
            ddlReasons.DataValueField = "Description";
            ddlReasons.DataBind();
            ddlReasons.Items.Insert(0, new ListItem("Reason"));
        }
    }

如何创建下拉列表的更新功能?

protected void DDLReasons_SelectedIndexChanged(object sender, EventArgs e)
    {
        string sel = ddlReasons.SelectedValue.ToString();
    }
    public static void UpdateSerialReason(int SerNoID, string Reasons)
    {
        JobPieceSerialNo SerNo = new JobPieceSerialNo(SerNoID);
        SerNo.Reason = sel; //can't find sel value 
        SerNo.Update();
    }

Dropdownlist:

 <asp:DropDownList ID="ddlReasons" runat="server" OnSelectedIndexChanged="DDLReasons_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>

我创建了一个OnSelectedIndexChanged函数来获取选中的值。但是我如何保存这个值呢?是否有一种方法将其传递到UpdateSerialReason函数?

如何保存选择后在下拉列表中选择的选项

只需将string sel声明移到DDLReasons_SelectedIndexChanged的范围之外,并获得SelectedItem的文本,因为它包含在您的数据源中。

private string sel;
protected void DDLReasons_SelectedIndexChanged(object sender, EventArgs e)
{
    sel = ddlReasons.SelectedItem.Text;
}
public static void UpdateSerialReason(int SerNoID, string Reasons)
{
    JobPieceSerialNo SerNo = new JobPieceSerialNo(SerNoID);
    SerNo.Reason = sel; // Should now be available
    SerNo.Update();
}

你以前使用它的方式,它只在局部作用域中可用,也就是说,在它被声明和使用的方法内部。

当你调用你的函数时,你可以得到选择的值:

UpdateSerialReason(/*Some SerNoID*/ 123456, ddlReasons.SelectedValue)

如果您按照Equalsk建议的那样将值保存到变量,则在回发完成后将失去值。如果您需要在其他页面上使用您的值,您可以将其保存在会话中。
如果你在一个asp.net页面中工作,你可以按照我上面的建议去做。然后你可以跳过下拉列表上的回发,并在需要时调用UpdateSerialReason:)

你可能想添加属性ViewStateMode="Enabled"EnableViewState="true"