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