簡體   English   中英

網格視圖中的 asp.NET 下拉列表 - 獲取選定的值

[英]asp.NET Drop Down List within a Grid View - Getting the selected value

我有一個狀態下拉列表,我在網格視圖中使用它,用戶可以在編輯網格視圖中的一行時選擇他們想要的列表項。 問題是當前的實現沒有檢索選定的值,而只是檢索默認/加載的值。

這是網格視圖的定義:

    <asp:GridView ID="applicationGrid" runat="server"  Width="95%"
        AutoGenerateEditButton="True" 
        AutoGenerateColumns="False" 
        ShowFooter="True"
        CellSpacing="10" 
        HeaderStyle-HorizontalAlign="Left" 
        ItemStyle-HorizontalAlign="Left"
        OnRowUpdating="applicationGrid_RowUpdating" 
        OnRowEditing="applicationGrid_RowEditing" 
        OnRowCancelingEdit="applicationGrid_RowCancelingEdit"
        AutoPostBack="true" >

這是下拉列表將在編輯時出現的列的定義:

                <asp:TemplateField HeaderText="Status">
                <ItemTemplate>   
                    <asp:Label ID="StatusDescription" runat="server" Text='<%# Eval("STATUS_DESCRIPTION") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="StatusDescriptionList" runat="server" DataTextField="status_description"
                            DataValueField="application_status_code" OnLoad="DropDownLoadEdit">
                       <asp:ListItem Text="Status:" Value="default"></asp:ListItem>
                    </asp:DropDownList>
                </EditItemTemplate>
            </asp:TemplateField>

這是處理更新場景的代碼:

    protected void applicationGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = applicationGrid.Rows[e.RowIndex];
        applicationGrid.EditIndex = -1;

        Label applicationCodeLabel = row.FindControl("AppID") as Label;
        TextBox applicationNameTextBox = row.FindControl("AppNameEdit") as TextBox;
        TextBox applicationURLTextBox = row.FindControl("AppURLEdit") as TextBox;
        DropDownList applicationStatusDropDownList = row.FindControl("StatusDescriptionList") as DropDownList;

        int applicationCode = Convert.ToInt32(applicationCodeLabel.Text);
        string applicationName = applicationNameTextBox.Text;
        string applicationURL = applicationURLTextBox.Text;
        int applicationStatus = Convert.ToInt32(applicationStatusDropDownList.SelectedValue.ToString());
        //string applicationStatus2 = applicationStatusDropDownList.SelectedItem.Value;
        //string applicationStatus3 = applicationStatusDropDownList.SelectedItem.Text;

        application.UpdateApplication(applicationCode, applicationName, applicationURL);
        PopulateApplications();
    }

一切正常,但所選值不是加載的值,也不是用戶選擇的值。 因此,問題是從列表中獲取選定的值。 什么需要改變,為什么?

        protected void applicationGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = applicationGrid.Rows[e.RowIndex];
        applicationGrid.EditIndex = -1;

        Label applicationCodeLabel = row.FindControl("AppID") as Label;
        TextBox applicationNameTextBox = row.FindControl("AppNameEdit") as TextBox;
        TextBox applicationURLTextBox = row.FindControl("AppURLEdit") as TextBox;
        DropDownList applicationStatusDropDownList = row.FindControl("StatusDescriptionList") as DropDownList;

        int applicationCode = Convert.ToInt32(applicationCodeLabel.Text);
        string applicationName = applicationNameTextBox.Text;
        string applicationURL = applicationURLTextBox.Text;
        int applicationStatus = Convert.ToInt32(applicationStatusDropDownList.SelectedValue.ToString());
        //string applicationStatus2 = applicationStatusDropDownList.SelectedItem.Value;
        //string applicationStatus3 = applicationStatusDropDownList.SelectedItem.Text;

        application.UpdateApplication(applicationCode, applicationName, applicationURL);
        PopulateApplications();
    }

編輯:添加我的填充方法:

        protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            try
            {
                PopulateApplications();
            }
            catch (Exception exception)
            {
                throw exception;
            }
        }
    }

    private void PopulateApplications()
    {
        DataTable reader = application.GetApplicationList();
        applicationGrid.DataSource = reader;
        applicationGrid.DataBind();
        applicationGrid.AllowSorting = true;
    }

    protected void DropDownLoadEdit(object sender, EventArgs e)
    {        
            DataTable statusTable = application.GetStatusList();

            DropDownList dropdown = sender as DropDownList;
            dropdown.DataSource = statusTable;
            dropdown.DataTextField = "status_description";
            dropdown.DataValueField = "application_status_code";
            dropdown.DataBind()
    }

更新 #2:我正在嘗試在用於所選索引的類中填充一個靜態變量。 這將在按下更新時使用。 但是,這仍然是獲取下拉列表的原始值,而不是選定的值。

這是方法:

    protected void StatusDescriptionList_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        selectedValue = Convert.ToInt32(ddl.SelectedValue.ToString());
    }

您是否在DropDownLoadEdit重新填充列表,無論轉換是否是回發? 如果是這樣,列表將在讀取其值之前重新填充,並在您的方法有機會讀取該值之前設置為默認值。

問題可能出在回帖上。

從下拉列表中選擇項目后,頁面將回發您選擇的值消失。

來解決這個問題。 綁定頁面內的下拉列表是回發或者使用 Ajax 更新面板。

@Ryan,你做了這個' AutopostBack="True"

<asp:DropDownList ID="StatusDescriptionList" runat="server" AutopostBack="True" DataTextField="status_description"
                            DataValueField="application_status_code" OnLoad="DropDownLoadEdit">
                       <asp:ListItem Text="Status:" Value="default"></asp:ListItem>
                    </asp:DropDownList>
<asp:DropDownList ID="StatusDescriptionList" runat="server" DataTextField="status_description"
                        DataValueField="application_status_code" SelectedValue="application_status_code" AutopostBack="True" OnLoad="DropDownLoadEdit">
                   <asp:ListItem Text="Status:" Value="default"></asp:ListItem>
                </asp:DropDownList>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM