2011-08-25 84 views
0

我在EditItemTemplate中有一個帶有adrpDownList的GridView。原始數據在標籤中,並且在編輯模式下被轉移到ddl。當按下編輯按鈕,我收到一個exeption:System.ArgumentOutOfRangeException:'ddlCities'有一個SelectedValue是無效的,因爲它不存在於項目列表中。 我發現了一個類似的問題在這裏和適應代碼到我的需求如下(其中城市是在GridView的ItemTemplate中從標籤收到一個字符串):GridView與EditItemTemplate中的DropDownList

protected void gvClients_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (!string.IsNullOrEmpty(city)) 
     { 
      ddlTemp = (DropDownList)e.Row.Cells[7].FindControl("ddlCities"); 
      if (ddlTemp != null) 
      { 

       ListItem item = ddlTemp.Items.FindByValue(city); 
       if (item != null) 
       { 
        item.Selected = true; 

       } 
      } 
     } 
    } 

爲了使其工作,我不得不擦除SelectedValue = <%#綁定(「城市」)%>否則上述例外再次發生。但是現在我想根據在ddl中選擇的值更新我的數據,並且我沒有成功這樣做,因爲ddl沒有綁定到gridView數據源中的任何內容。我非常感謝幫助。

回答

0

的問題顯然是,我的城市的數據是從右到左語言(希伯來語),所以當的ItemTemplate標籤綁定到它綁定時添加前導空格,因此數據的DDL的SelectedValue它不能在ddl項目列表中找到該項目。我通過捕獲RowEditing事件解決了這個問題,並使用Trim()函數從標籤中提取文本,並將修剪後的值放入名爲city的字符串變量中。然後在RowDataBound事件(問題中的代碼)中,在ddl中選擇適當的項目成功。因爲ddl沒有綁定到GridView的數據,所以我無法更新城市列。爲此,我捕獲了ddl的SelectedIndexChanged事件,並將所選值放入名爲ViewState [「CitySelect」]的ViewState對象中。然後,在更新時,我發現RowUpdating事件如下所示,即使它未綁定到gridView數據源,也會根據城市ddl更改成功更新包含城市列的行。

protected void gvClients_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 

     GridViewRow row = gvClients.Rows[e.RowIndex]; 

     if (ViewState["CitySelect"] != null) 
     { 
      e.NewValues.Remove("city"); 
      string tempCity = (string)ViewState["CitySelect"]; 
      e.NewValues.Add("city",tempCity); 
      row.Cells[7].Text = (string)e.NewValues["city"]; 
     } 
     else 
      row.Cells[7].Text = (string)e.OldValues["city"]; 
    } 

如果有人可以提出更簡單的建議,我將不勝感激。

1

確保在嘗試設置其值之前綁定下拉菜單。

Control ddlCtrl = e.Row.FindControl("ddlCities"); 
if (ddlCtrl != null) 
{ 
    DropDownList ddlCities = ddlCtrl as DropDownList; 

    //using a datasource control 
    CitiesDataSourceControl.DataBind(); 

    if (ddlCities.Items.Count > 0) 
    { 
     ListItem item = ddlCities.Items.FindByValue("Boston"); 
     if (item != null) 
      item.Selected = true; 
    } 
} 
+1

他們會解決所有問題嗎? –

+0

@Bala R:感謝您的評論。我修改了我的答案。 –

+0

dropDownList通過智能標籤綁定到數據源,並且在那裏也設置DataTextField和DataValueField。 –

相關問題