0

我在GridView中显示列,其中一列是下拉列表。我希望能够在选择某项内容后立即保存下拉列表中选择的选项。我已经做了这一点,有一个文本框的列,所以我希望做一些类似的DropDownList。 的文本框,下拉列表中的代码:如何在选择后在Dropdownlist中选择保存选项

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函数?

+0

只需添加下拉列表中选择事件中的方法,并传递了'sel'值。 – Learner

回答

2

只需将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(); 
} 

您以前的方式只能在本地范围内使用,即在声明和使用它的方法内。

+0

谢谢sel现在可用,但它仍然没有保存从DropDownList所做的更改。 selectedvalue返回null – user123456789

+0

可能是因为您的ListItem没有Value,而您实际上是在Text之后。更新了答案。 – Equalsk

+0

DDL的所有代码都在那里。我没有列出每个值。 DDL填充在gvPieceDetails_ItemDataBound方法中。将其更改为文本会导致此错误:错误不能像使用方法一样使用非可调用成员'System.Web.UI.WebControls.ListItem.Text'。 – user123456789

0

你可以当你调用函数获取所选值:

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

后,如果保存价值变量Equalsk建议回传完成,您将会失去价值。如果您需要在另一页上使用您的价值,您可以将其保存在会话中。
如果您正在一个asp.net页面中工作,您可以按照我上面的建议进行操作。然后你就可以跳过你的DropDownList的回发,并呼吁UpdateSerialReason当你需要:)

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

+0

要保存会话中你做Session [“ddlReasonsValue”] = ddlReasons.SelectedValue – Lokki