【问题标题】:Grab SelectedValue of Dropdownlist in Gridview在 Gridview 中抓取下拉列表的 SelectedValue
【发布时间】:2014-01-30 22:20:36
【问题描述】:

在 Gridview 中创建尚未更新职位的用户列表。我希望列表有一个下拉列表,其中包含所有可能的标题选择以及下拉列表旁边的按钮。然后一个人可以进来并更改下拉菜单中的标题,点击按钮,更新并从列表中删除。

我拥有所有这些我希望它看起来的方式,但我试图弄清楚如何将该行中下拉框的 SelectedValue 传递给 OnClick 后面的代码。正如您在下面看到的,我能得到的最接近的是在 CommandArgument 中传递行号。有什么建议我可以将特定行的下拉列表的 SelectedValue 获取到 OnClick?

编辑:也许我应该使用 OnRowCommand 而不是 OnClick?

目前看起来像这样:

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

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>

代码背后

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

解决方案:在我将 !IsPostBack 添加到 Page_Load 后,我在下面批准的答案对我有用

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

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    你可以这样做:

    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
    }
    

    【讨论】:

    • 当我尝试这个时,无论我在下拉框中选择什么,每次都会得到 2 作为结果。 2 恰好是下拉框中的第一个值,但即使我选择了不同的选项,该值也始终为 2。有什么想法吗?
    • 想通了,当我绑定 bindTitleView() 时,我的 Page_Load 中缺少 if (!IsPostBack)。哎呀!!感谢您的帮助。
    【解决方案2】:

    在你的 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
        }
    }
    

    如果这不是您要找的,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多