【问题标题】:how to get value of dropdownlist of a gridview?如何获取gridview的下拉列表的值?
【发布时间】:2014-01-21 00:24:12
【问题描述】:

在 gridview 的编辑模板中,我有一个下拉列表,当单击每个 gridview 行的编辑按钮时,它将提供一个值列表。

<EditItemTemplate>
 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack=false  OnLoad="DropDownList1_onload"
    onselectedindexchanged="DropDownList1_SelectedIndexChanged">
</EditItemTemplate>

c#

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddl = (DropDownList)sender;
    GridViewRow row = (GridViewRow)ddl.Parent.Parent;
    int idx = row.RowIndex;

    DropDownList txtECustCode = (DropDownList)row.Cells[0].FindControl("DropDownList1");
    string _text1 = txtECustCode.selectedvalue();

}
protected void DropDownList1_onload(object sender, EventArgs e)
{

        SqlConnection cn = new System.Data.SqlClient.SqlConnection("Data Source=CHANGEME1;Initial Catalog=Reflection;Integrated Security=True");
        SqlDataAdapter da = new SqlDataAdapter("select salary from employee", cn);
        DataSet ds = new DataSet();
        var ddl = (DropDownList)sender;
        da.Fill(ds);
        cn.Close();
        ddl.DataSource = ds;
        ddl.DataTextField = "salary";
        ddl.DataValueField = "salary";
        ddl.DataBind();
        ddl.Items.Insert(0, new ListItem("--Select--", "0"));


}

所以当我单击编辑按钮时,onload 事件将被触发并列出数据库中的数据。当我选择下拉列表中的一项时,我需要访问下拉列表中的选定值。

但每当我在 selectedindexchanged 之前更改下拉菜单时,就会再次调用 onload 函数,从而刷新内容并将 selectedindex 返回为 0。

如何防止这种情况发生?

【问题讨论】:

  • 没关系,误读你的代码。
  • SelectedIndexChanged 事件是否在更新发生的同时触发,例如在选择期间?
  • 没有。当我选择项目并单击更新按钮时,将触发此事件。
  • 我不太明白你的问题。这是在球场上吗:“如果下拉有焦点,我需要防止更新发生?”
  • 每当我更改下拉菜单时,在“selectedindexchanged”之前再次调用“onload”函数,该函数依次刷新内容并将 selectedindex 返回为 0。所以即使我选择了第 4 个值,返回的值也会为 0,因为 onload 在调用 selectedindex 之前刷新控件。

标签: c# asp.net gridview


【解决方案1】:

根据您的 cmets,我认为您需要在每次刷新之前保存当前值。让我们假设索引 0 始终是我们可以忽略的“空白”值。稍微改变你的 onload 方法以提供保存和重新选择

protected void DropDownList1_onload(object sender, EventArgs e)
{
    //SAVE SELECTED
    string selected = "";
    if(DropDownList1.Items.Count > 0 && DropDownList1.SelectedIndex != 0)
    {
         selected = DropDownList1.SelectedValue;
     }
    //UPDATE
    SqlConnection cn = new System.Data.SqlClient.SqlConnection("Data Source=CHANGEME1;Initial Catalog=Reflection;Integrated Security=True");
    SqlDataAdapter da = new SqlDataAdapter("select salary from employee", cn);
    DataSet ds = new DataSet();
    var ddl = (DropDownList)sender;
    da.Fill(ds);
    cn.Close();
    ddl.DataSource = ds;
    ddl.DataTextField = "salary";
    ddl.DataValueField = "salary";
    ddl.DataBind();
    ddl.Items.Insert(0, new ListItem("--Select--", "0"));
    //RESELECT
    if(!String.IsNullOrEmpty(selected))
    {
         DropDownList1.SelectedValue = selected;
    }
}

本质上,如果选择了某些内容,您需要在更新之前保存您选择的内容。然后更新后,重新选择它。我的代码只是一个示例,您可能需要对其进行调整以实际捕获并重新找到在更新之前实际选择的元素。

【讨论】:

  • 伟大的逻辑..只需稍作更改,您就可以使我的代码正常工作。非常感谢。
  • 没问题,很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多