2014-01-21 3 views
2

В edittemplate 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 вызывается снова, который INTURN обновить содержание и вернуть SelectedIndex как 0.

как я могу предотвратить это?

+0

Не обращайте внимания на неправильный код. – JNYRanger

+0

Событие 'SelectedIndexChanged 'запускается одновременно с обновлением, например, во время выбора? – JNYRanger

+0

Нет, когда я выбираю элемент и нажимаю кнопку обновления, это событие будет запущено. –

ответ

3

Основываясь на ваших комментариях, я думаю, вам нужно сохранить текущее значение перед обновлением каждый раз. Предположим, что индекс 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; 
    } 
} 

По существу, вы должны сохранить то, что вы выбрали перед обновлением IF выбирается что-то. Затем после обновления переустановите его. Мой код - всего лишь пример, который вам может понадобиться, чтобы настроить его, чтобы фактически захватить и повторно найти элемент, который был фактически выбран до обновления.

+2

Великая логика .. С небольшим изменением вы делаете мой код работы. Благодаря тонну. –

+0

Без проблем, рад, что я мог бы помочь! – JNYRanger

Смежные вопросы