简体   繁体   English

网格视图中的 asp.NET 下拉列表 - 获取选定的值

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

I have a status drop down list which I am using within a grid view, the users can select a list item they want when editing a row within the grid view.我有一个状态下拉列表,我在网格视图中使用它,用户可以在编辑网格视图中的一行时选择他们想要的列表项。 The problem is that the current implementation is not retrieving the selected value, but is only retrieving the default/loaded value.问题是当前的实现没有检索选定的值,而只是检索默认/加载的值。

This is the defination of the grid view:这是网格视图的定义:

    <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" >

And this is the defination of the Column where the dropdown list will appear on edit:这是下拉列表将在编辑时出现的列的定义:

                <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>

This is the code behind which is handling the update scenario:这是处理更新场景的代码:

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

All is working, but the selected value is not the one which the is loaded and not the one which the user selects.一切正常,但所选值不是加载的值,也不是用户选择的值。 Therefore the problem is getting the selected value from the list.因此,问题是从列表中获取选定的值。 What needs to be changed, and why?什么需要改变,为什么?

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

EDIT: Adding my Populate Methods:编辑:添加我的填充方法:

        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()
    }

Update #2: I am trying to fill up a static variable in the class which is for the selected index.更新 #2:我正在尝试在用于所选索引的类中填充一个静态变量。 This will then be used when update is pressed.这将在按下更新时使用。 However, this is still getting the original value of the drop down list and not the selected one.但是,这仍然是获取下拉列表的原始值,而不是选定的值。

This is the method:这是方法:

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

Are you repopulating the list in DropDownLoadEdit , regardless of whether the transition is a postback or not?您是否在DropDownLoadEdit重新填充列表,无论转换是否是回发? If so, the list will be repopulated before its value is read, and set to the default before your method has a chance to read the value.如果是这样,列表将在读取其值之前重新填充,并在您的方法有机会读取该值之前设置为默认值。

The issue may be of the post back.问题可能出在回帖上。

Once the item is selected from the drop down the page get post back the value you selected get vanished.从下拉列表中选择项目后,页面将回发您选择的值消失。

To over come this issue.来解决这个问题。 Bind the drop down list inside page is post back or else make use of a Ajax update panel.绑定页面内的下拉列表是回发或者使用 Ajax 更新面板。

@Ryan, Have you done this ' AutopostBack="True" @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.

相关问题 asp.net:设置为下拉列表选择的默认值 - asp.net : set default value selected for a drop down list 无法在asp.net的下拉列表中显示选定的值 - Not able to display selected value in drop down list in asp.net 如何获取转换后的布尔值以在asp.net gridview的可编辑下拉列表中显示为选定值? - How to get converted boolean value to show as selected value in the editable drop down list in asp.net gridview? 如何确定选定的值在asp.net MVC视图中的下拉列表? - How to determine selected value for drop down lists in asp.net MVC View? ASP.NET MVC 2-如何从下拉菜单中获取选定的值? - ASP.NET MVC 2 - How can I get the selected value from a drop down into my view model? asp.net中下拉列表的选定索引更改事件 - Selected Index change event of drop down list in asp.net 如何在asp.net中保存下拉列表选择的索引? - How to save the drop down list selected index in asp.net? 如何在asp.net mvc3中获取下拉列表的选定值? - how to get selected value of drop down list in asp.net mvc3? ASP.NET C#将所选值从下拉列表输出更改为标签 - ASP.NET C# change selected value from drop down list output to label ASP.NET 代码隐藏无法获取选定的下拉列表值(设置 Javascript 属性后) - ASP.NET codebehind can't get selected drop down list value (after set Javascript attribute)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM