简体   繁体   English

在Gridview中获取Dropdownlist的SelectedValue

[英]Grab SelectedValue of Dropdownlist in Gridview

Creating a list of users that haven't updated their job title in a Gridview. 创建尚未在Gridview中更新其职务的用户列表。 I want the list to have a dropdown filled with all the possible title selections and a button next to the dropdown. 我希望列表中有一个下拉列表,其中包含所有可能的标题选择,并且下拉列表旁边有一个按钮。 Then a person can come in and change the title in the dropdown hit the button and its updated and removed from the list. 然后,一个人可以进入并在下拉菜单中更改标题(单击按钮),然后将其更新并从列表中删除。

I have all of this the way I want it to look but I'm trying to figure out how to pass the SelectedValue of the dropdown box in that row to the code behind OnClick. 我已经按照自己想要的方式来完成所有这些工作,但是我试图弄清楚如何将该行中下拉框的SelectedValue传递给OnClick背后的代码。 As you can see below the closest I can get is pass the row number in the CommandArgument. 如您所见,最接近的是在CommandArgument中传递行号。 Any suggestions how I can get the SelectedValue of the dropdown of that specific row to the OnClick? 关于如何将特定行的下拉列表的SelectedValue传递给OnClick的任何建议?

EDIT : Maybe I should be using OnRowCommand instead of OnClick? 编辑 :也许我应该使用OnRowCommand代替OnClick?

Looks like this currently: 当前看起来像这样:

John Doe | DropdownList  Button
Jane Doe | DropdownList  Button
Joe Doe | DropdownList  Button
Jeff Doe |  DropdownList  Button

ASPX ASPX

<asp:GridView runat="server" ID="TitleView" OnRowDataBound="TitleView_RowDataBound" AutoGenerateColumns="False">
                <Columns>
                    <asp:BoundField DataField="Fullname" HeaderText="Fullname" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <div class="input-append"><asp:DropDownList CssClass="span5" ID="TitleList" runat="server">
                            </asp:DropDownList>
                                <asp:Button ID="lbnView" runat="server" Text="Update" CssClass="btn btn-primary" OnClick="btn_Clicked" 
                                            CommandArgument='<%# ((GridViewRow)Container).RowIndex %>'></asp:Button></div>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
</asp:GridView>

Code Behind 背后的代码

public void bindTitleView()
    {
        using (SqlConnection conn = new SqlConnection(""))
        {
            SqlCommand cmd = new SqlCommand(@"SELECT U.First + ' ' + U.Last as Fullname, U.UserID, T.Name FROM Employees U LEFT JOIN Titles T ON U.Title = T.ID WHERE U.Active = '1' AND U.Title = '92' ORDER BY Fullname ASC", conn);
            conn.Open();
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            DataSet myDataSet = new DataSet();
            adp.Fill(myDataSet);
            TitleView.DataSource = myDataSet;
            TitleView.DataBind();
        }
    }
    protected void TitleView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DropDownList ddl = (DropDownList)e.Row.FindControl("TitleList");
            using (SqlConnection conn = new SqlConnection(""))
            {
                SqlCommand cmd = new SqlCommand(@"SELECT ID, Name FROM Titles ORDER BY Name ASC", conn);
                conn.Open();
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                DataTable myDataSet = new DataTable();
                adp.Fill(myDataSet);
                ddl.DataSource = myDataSet;
                ddl.DataTextField = "Name";
                ddl.DataValueField = "ID";
                ddl.DataBind();
            }
        }
    }
    protected void btn_Clicked(object sender, EventArgs e)
    {
                String rowid = ((Button)sender).CommandArgument;
    }

SOLUTION: The answer I approved below worked for me once I added !IsPostBack to the Page_Load 解决方案:一旦添加!IsPostBack到Page_Load,我下面批准的答案就对我有用。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            bindTitleView();
        }

In your btn_click write the following code 在您的btn_click中编写以下代码

protected void btn_Clicked(object sender, EventArgs e)
{

    Button Sample = sender as Button;
    GridViewRow row = Sample.NamingContainer as GridViewRow;
    DropDownList drp = row.FindControl("TitleList") as DropDownList;
    //Now use drp.SelectedValue
    }
}

Let me know if this isnt what you are looking for. 让我知道这是否不是您想要的东西。

You can do like that: 您可以这样做:

protected void btn_Clicked(object sender, EventArgs e)
{
    int line = ((GridViewRow)((Button)sender).Parent.Parent).RowIndex;
    DropDownList drp = ((DropDownList)TitleView.Rows[line].FindControl("TitleList"));
    //Continue the method
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM