2017-04-10 51 views
0

免責聲明 - 是的,我使用Google搜索,顯然我沒有找到解決方案。獲取數據庫ID爲下拉項目的值

Webform,ASP.NET,SQL,沒有sqldatasource - 所有代碼隱藏。

好吧,看起來我誤解了我的應用程序出了什麼問題。

使用.SelectedValue獲得下拉項的正確值 - 但僅在我的Insert()方法中,.SelectedValue在我的UpdateMethod中返回空值。

插入()

    using (con = new SqlConnection(conString)) 
       { 
        try 
        { 
         con.Open(); 

         cmd = new SqlCommand("INSERT INTO Building(Building_Code, Building_Name, Company_ID, Active) VALUES(@BuildingCode, @BuildingName, @CompanyID, @Active)", con); 
         cmd.Parameters.AddWithValue("@BuildingCode", txtBuildingCode.Text); 
         cmd.Parameters.AddWithValue("@BuildingName", txtBuildingName.Text); 
         cmd.Parameters.AddWithValue("@CompanyID", ddlCompanyCode.SelectedValue); 
         cmd.Parameters.AddWithValue("@Active", chkBuildingActive.Checked); 

         cmd.ExecuteNonQuery(); 

        } 

更新()

    using (con = new SqlConnection(conString)) 
       { 
        try 
        { 
         if (ddlCompanyCode.SelectedIndex >= 1) 
         { 

          con.Open(); 

          cmd = new SqlCommand("UPDATE Building SET Building_Name = @BuildingName, Company_ID = @CompanyID, Active = @Active WHERE Building_ID = @BuildingID", con); 
          cmd.Parameters.AddWithValue("@BuildingID", selectedRecordID); 
          cmd.Parameters.AddWithValue("@BuildingName", txtBuildingName.Text); 
          cmd.Parameters.AddWithValue("@CompanyID", ddlCompanyCode.SelectedValue); 
          cmd.Parameters.AddWithValue("@Active", chkBuildingActive.Checked); 

          cmd.ExecuteNonQuery(); 
         } 
        } 
        catch (SqlException sqlExc) 
        { 
         MessageBox.Show(sqlExc.Message); 
        } 
       } 

BindForm()

   try 
      { 
       con.Open(); 

       reader = cmd.ExecuteReader(); 

       while (reader.Read()) 
       { 
        txtBuildingCode.Text = reader["Building_Code"].ToString(); 
        txtBuildingName.Text = reader["Building_Name"].ToString(); 
        ddlCompanyCode.SelectedItem.Text = reader["Company_Code"].ToString(); 
        chkBuildingActive.Checked = reader.GetBoolean(reader.GetOrdinal("Active")); 
       } 
      } 
      catch (SqlException sqlExc) 
      { 
       MessageBox.Show(sqlExc.Message); 
      } 

什麼會導致這個問題?

+0

@TamásSzabó[DropDownList](https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist(v = vs.110).aspx)上沒有此屬性。 。 – mason

+0

DropdownList項目的索引是否與所選的Company_ID匹配?更新數據庫的代碼是在DropDownList的SelectedIndexChanged事件中執行的? –

+0

ddl索引在公司上不匹配。我沒有任何SelectedIndexChanged。 – user3691838

回答

0

嗚!我從朋友那裏得到了一個解決方案。

爲公司創造碼值

 string strCompany = ""; 

一個局部變量閱讀DataReader的內容到變量

      txtBuildingCode.Text = reader["Building_Code"].ToString(); 
          txtBuildingName.Text = reader["Building_Name"].ToString(); 
          strCompany = reader["Company_Code"].ToString(); 

然後通過

集落的selectedIndex下至項目索引
ddlCompanyCode.SelectedIndex = ddlCompanyCode.Items.IndexOf(ddlCompanyCode.Items.FindByText(strCompany)); 

感謝大家的幫助!

0

而不是使用ddlCompanyCode.DataValueField使用SelectedValue財產

cmd.Parameters.AddWithValue("@CompanyID", ddlCompanyCode.SelectedValue); 

您可以如用SelectedItem.Value

cmd.Parameters.AddWithValue("@CompanyID", ddlCompanyCode.SelectedItem.Value); 
+0

.SelectedValue返回下拉文本,我需要該值的ID。 – user3691838

+0

@ user3691838,如果有幫助,請參閱編輯回答。 – Rahul

+0

我仍然只是創建文本值而不是ID。當我進入代碼時,我可以看到ddlCompanyCode有一個計數爲5的項目集合(這是公司表格中的記錄),但我無法弄清楚如何訪問該項目編號。 – user3691838