2012-07-03 106 views
1

我有一個表格,我有4個下拉菜單國家,州,區和城市。國家填寫表格加載和休息填充選定的索引更改事件。順序是在國家的選定索引更改狀態填充。在州 - >區和居民區 - >城市人口衆多。在ASP.Net的下拉列表中動態填充和設置值

爲了保存它工作正常,但當我更新值時,它顯示空引用錯誤。在進行調試時,下拉列表沒有填充,而我嘗試設置值。以下是我的代碼。

using (var manager = new LocationManager()) 
     { 
      var dt = manager.GetLocationById(i); 
      if (dt.Rows.Count == 1) 
      { 
       Countries.SelectedValue = Countries.Items.FindByText(dt.Rows[0]["Country"].ToString()).Value; 
       BindStates(Convert.ToInt32(Countries.SelectedItem.Value)); 

       States.SelectedValue = States.Items.FindByText(dt.Rows[0]["State"].ToString()).Value; 
       BindDistricts(Convert.ToInt32(States.SelectedItem.Value)); 

       Districts.SelectedValue = Districts.Items.FindByText(dt.Rows[0]["District"].ToString()).Value; 
       BindCities(Convert.ToInt32(Districts.SelectedItem.Value)); 

       Cities.SelectedValue = Cities.Items.FindByText(dt.Rows[0]["City"].ToString()).Value; 
       Pincode.Text = dt.Rows[0]["Pincode"].ToString(); 

       ViewState["Id"] = dt.Rows[0]["LocationId"].ToString(); 



      } 
     } 

我得到錯誤:{ 「未將對象引用設置到對象的實例。」}在方法

BindStates(Convert.ToInt32(Countries.SelectedItem.Value));

回答

1

我覺得這個問題是不是與人口的下降,但與尋找價值,當

Countries.Items.FindByText(dt.Rows[0]["Country"].ToString()) 

不會找到任何匹配的值,它將返回null。所以在null上應用'Value'屬性會給出錯誤。

您可以在選擇它之前進行空檢查。 類似如下:

countryDropDown.SelectedValue = countryDropDown.Items.FindByText(dt.Rows[0]["Country"].ToString()) != null ? countryDropDown.Items.FindByText(dt.Rows[0]["Country"].ToString()).Value : countryDropDown.Items.FindByText("-Please select-").Value; 
1

檢查Countries.SelectedItem = NULL

+0

經常檢查,如果選擇的項目是不是空 – JohnnBlade

+0

並採用了許多來自一個字符串時,它使用int.TryParse – JohnnBlade

+0

我在數據庫中的文本部分轉換。我必須找到並設置其相應的值 –

1

@Amit! Ranjan:綁定page init方法中的所有值並在頁面加載時爲所有下拉列表選擇特定值:

您正在獲取空引用,因爲沒有值已經綁定到下拉列表ñ。

在頁面初始化綁定所有的值到下拉 印度 美國 英國 ASP:DropDownList的>

在頁面加載

DropDownList .SelectedValue= dt.Rows[0]["Country"].ToString()).Value; 
+0

不工作......你是否明白我的意思......是否有任何疑問 –

1
Have u tried this in BindStates Method 

drdStates.SelectedIndex = drdOrderPrice.Items.IndexOf(drdOrderPrice.Items.FindByText("xyz"));