按钮单击事件C#ASP.NET后,DataGrid中的静态DropDownList返回错误的选定值

时间:2017-06-19 17:57:26

标签: c# asp.net datagrid

我想在单击提交按钮时从我的DataGrid中的DropDownLists中获取所选值,但它们总是返回下拉列表中的第一个选项(批准)。如何在使用此类静态下拉项目时获取所选值?

.aspx代码:     

<input type="text" name="form-partner-name" placeholder="Partner name" 
class="form-partner-name form-control" id="form-partner-name" 
                                            value="<?php echo 
$_SESSION['user']['firstName'], " ", $_SESSION['user']['lastName']?>">

.aspx.cs代码:

            <!-- several BoundColumns were here -->

            <asp:TemplateColumn HeaderText="Actions">
                <HeaderStyle CssClass="ProfDataGridHeader" BorderStyle="Solid" BorderWidth="1"></HeaderStyle>
                <ItemStyle Width="45%" CssClass="ProfDataGridRow" BorderStyle="Solid" BorderWidth="1"></ItemStyle>  
                <ItemTemplate>   
                    <asp:DropDownList ID="ddlApprovalStatus" AppendDataBoundItems="True" runat="server" Width="150px" EnableViewState="true" ViewStateMode="Enabled">  
                        <asp:ListItem Value="approve" Text="Approve"></asp:ListItem>
                        <asp:ListItem Value="reject" Text="Reject"></asp:ListItem>
                    </asp:DropDownList>   
                </ItemTemplate>
            </asp:TemplateColumn>



        </Columns>



    </asp:DataGrid>
    <br />
    <asp:Button ID="btnSubmit" Text="Submit" runat="server" CssClass="ally-btn" OnClick="btnSubmit_Click" />

即使DropDownLists选择了“拒绝”,debugLabel.Text也总是“接受,接受,接受......”。

1 个答案:

答案 0 :(得分:1)

通过处理回发事件来重现并解决您的问题。

default.aspx.cs

using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;

namespace DropdownClicks
{

    public partial class WebForm1 : System.Web.UI.Page
    {
        static List<string> itemsToInsert = new List<string> { "first", "second", "third" };

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                //only do this binding on page load, otherwise you'll "reset" the grid every time there is a postBack.
                mydg.DataSource = itemsToInsert;
                mydg.DataBind();
            }
        }

        protected void Unnamed_Click(object sender, EventArgs e)
        {
            DropDownList DDLP;
            string acceptStatus;
            string retVal = "";
            for (int i = 0; i < mydg.Items.Count; i++)
            {
                DDLP = (DropDownList)mydg.Items[i].FindControl("ddlApprovalStatus");
                acceptStatus = DDLP.SelectedValue;
                retVal += acceptStatus + ", ";
            }
            lbl_1.Text = retVal;
        }
    }
}

的Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DropdownClicks.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label Text="text" runat="server" ID="lbl_1" />
        <asp:DataGrid runat="server" ID="mydg" EnableViewState="true">
            <Columns>
                <asp:TemplateColumn HeaderText="Actions">
                <HeaderStyle CssClass="ProfDataGridHeader" BorderStyle="Solid" BorderWidth="1"></HeaderStyle>
                <ItemStyle Width="45%" CssClass="ProfDataGridRow" BorderStyle="Solid" BorderWidth="1"></ItemStyle>  
                <ItemTemplate>   
                    <asp:DropDownList ID="ddlApprovalStatus" AppendDataBoundItems="True" runat="server" Width="150px" EnableViewState="true" ViewStateMode="Enabled">  
                        <asp:ListItem Value="approve" Text="Approve"></asp:ListItem>
                        <asp:ListItem Value="reject" Text="Reject"></asp:ListItem>
                    </asp:DropDownList>   
                </ItemTemplate>
            </asp:TemplateColumn>
            </Columns>
        </asp:DataGrid>
        <asp:Button Text="click me" runat="server" OnClick="Unnamed_Click" EnableViewState="true" />
    </div>
    </form>
</body>
</html>