2016-01-20 117 views
0

什麼在這裏發生的是,每當我從dropdownlist選擇一個值,該網頁獲得回發並agains談到「---選擇---」下拉列表選擇的值是沒有得到選擇

我從鏈接here嘗試,但它並沒有奏效

if (DtMainA.Rows.Count > 0) 
{ 
    DataTable DtGoodType = new DataTable(); 
    ObjPriDaAdp   = new OracleDataAdapter("select mkey, vehicle_no from XXCUS.XXGID_AUDIT_ENTRY where mkey= '" + Hid_MKey.Value + "'", ObjPriCon); 
    ObjPriDaAdp.Fill(DtGoodType); 

    if (DtGoodType.Rows.Count > 0) 
    { 
     cmdVehicleNo.DataTextField = "vehicle_no"; 
     cmdVehicleNo.DataValueField = "mkey"; 
     cmdVehicleNo.DataSource = DtGoodType; 
     cmdVehicleNo.DataBind(); 
     cmdVehicleNo.Items.Insert(0, new ListItem("--- Select ---", "0")); 
    } 
} 

也看到我的aspx: -

<asp:DropDownList ID="cmdVehicleNo" runat="server" Style="width: 50%" AutoPostBack="true" 
    OnSelectedIndexChanged="cmdVehicleNo_SelectedIndexChanged"> 
    <asp:ListItem Value="0" Selected="True" >--- Select ---</asp:ListItem> 
</asp:DropDownList> 

UPDATE

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     if (ObjPriCon.State == System.Data.ConnectionState.Closed) 
     { 
      ObjPriCon.Open(); 
     } 
     if (hidAttachid.Value == "") 
     { 
      hidAttachid.Value = "0"; 
     } 

     ObjPriCmd = new OracleCommand("Select count(MKEY)cntrow from XXCUS.XXGID_AUDIT_ENTRY", ObjPriCon); 
     FunFillData(); 
     ObjPriCon.Close(); 
     fillProject(); 
     fillGoodType(); 
    } 
} 


protected void CmbProject_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // ClientScript.RegisterStartupScript(this.GetType(), "SuccessScript", "window.location.href='FrmCentral_Monitoring_Entry_OUT.aspx?userid=" + Hid_userid.Value + "';", true); 
    if (CmbProject.SelectedIndex > 0) 
    { 
     DtCombo = FillComboBox("select mkey, vehicle_no from XXCUS.XXGID_AUDIT_ENTRY where time_out IS NULL and Project_id='" + CmbProject.SelectedValue + "'"); 

     cmdVehicleNo.DataTextField = "vehicle_no"; 
     cmdVehicleNo.DataValueField = "mkey"; 
     cmdVehicleNo.DataSource = DtCombo; 
     cmdVehicleNo.DataBind(); 
     cmdVehicleNo.Items.Insert(0, new ListItem("--- Select ---", "0")); 
     if (DtCombo.Rows.Count == 1) 
     { 
      cmdVehicleNo.SelectedIndex = 1; 
     } 
     DtCombo.Clear(); 
    } 
    Funclear(); 
} 
+2

您的aspx顯式設置** ---選擇 - **通過選擇=「選擇=」True「# –

+0

@超級編碼器:從aspx中移除true之後。它仍然沒有按預期工作 – BNN

+0

可能你的問題是'回發'。檢查這個問題也是:http://stackoverflow.com/questions/34544500/get-text-value-from-textbox-after-value-text-changed-server-side –

回答

1

很明顯的問題與您目前的代碼是每當你選擇任何它em從下拉列表中執行回傳並觸發CmbProject_SelectedIndexChanged事件。在這種情況下,我不知道你爲什麼再次填充下拉菜單。理想情況下,你應該在初始頁面加載綁定下拉只有一次這樣的: -

if (!IsPostBack) 
{ 
    BindDropDownList(); //Call this method 
} 

//Write a separate method to bind the dropdown 
private void BindDropDownList() 
{ 
    DataTable DtGoodType = new DataTable(); 
    ObjPriDaAdp = new OracleDataAdapter("select mkey, vehicle_no from XXCUS.XXGID_AUDIT_ENTRY where mkey= '" + Hid_MKey.Value + "'", ObjPriCon); 
    ObjPriDaAdp.Fill(DtGoodType); 

    if (DtGoodType.Rows.Count > 0) 
    { 
     cmdVehicleNo.DataTextField = "vehicle_no"; 
     cmdVehicleNo.DataValueField = "mkey"; 
     cmdVehicleNo.DataSource = DtGoodType; 
     cmdVehicleNo.DataBind(); 
     cmdVehicleNo.Items.Insert(0, new ListItem("--- Select ---", "0")); 
    } 
} 

最後,在所選擇的選項變化事件中,你應該只寫你想要當用戶更改選擇做什麼邏輯: -

protected void CmbProject_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //Do Stuffs 
} 
+0

: - 實際上,同時'選擇indexchanged'我評論了一行,即'cmdVehicleNo.SelectedValue = DtGoodType.Rows [0] [「mkey」]。ToString();'這是選擇價值。但它是在page_load上開始的,我希望手動選擇這裏是代碼:'if(Hid_MKey.Value!=「0」) {cmdVehicleNo.SelectedValue = DtGoodType.Rows [0] [「mkey」 ]的ToString(); }' – BNN

+0

@coder - 當用戶在下拉列表中選擇某個值並且您想在此事件中設置某些值時,會觸發「CmbProject_SelectedIndexChanged」?這真的很奇怪。你究竟想要做什麼? –

+0

請參閱'page_load'的'cmdVehicleNo',我想要使用默認值。但是當我做'CmbProject_SelectedIndexChanged'時,我希望第一個'cmdVehicleNo'是默認的。之後我可以從'cmdVehicleNo'中選擇。當時選擇索引更改不起作用 – BNN