2013-03-25 113 views
0

我有一個gridview填充從數據庫中的表中提取的元素。每行包含2個文本框和1個下拉列表。下載列表在頁面加載時填充。下拉列表不更新在gridview

我的問題是:當我編輯該行時,從下拉列表中選擇另一個項目,然後單擊更新按鈕,沒有任何更改。下拉列表仍然返回到它的默認值,既沒有修改的值在數據庫中更新(刪除不起作用等)。我無法理解原因。請幫幫我。

我的GridView:

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView_OnRowDataBound" OnRowUpdating="GridView_OnRowUpdating" 
DataKeyNames="id" DataSourceID="DataSource" ><AlternatingRowStyle BackColor="White" /> 
<Columns> 
    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowCancelButton="True" /> 

<asp:TemplateField HeaderText="currentCity" SortExpression="currentCity" ItemStyle- HorizontalAlign="Center" Visible="false"> 
     <ItemTemplate> 
      <asp:Label runat="server" ID="lblcurrentCity" Text='<%# Bind("CodiceContrattoRisorsa") %>' Visible="false" ></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField HeaderText="id" SortExpression="id" ItemStyle-HorizontalAlign="Center" > 
     <ItemTemplate> 
      <asp:TextBox runat="server" ID="txtId" Text='<%# Bind("id") %>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 

<asp:TemplateField HeaderText="name" SortExpression="name" ItemStyle- HorizontalAlign="Center" > 
     <ItemTemplate> 
      <asp:TextBox runat="server" ID="txtName" Text='<%# Bind("name") %>'> </asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 


    <asp:TemplateField HeaderText="city" SortExpression="city" ItemStyle- HorizontalAlign="Center"> 
     <EditItemTemplate> 
      <asp:DropDownList ID="ddlCity" runat="server"></asp:DropDownList> 
     </EditItemTemplate> 
     <ItemTemplate> 
      <asp:DropDownList ID="ddlCity" runat="server" Enabled="false" > 
      </asp:DropDownList> 
     </ItemTemplate> 
    </asp:TemplateField> 

</Columns> 
<RowStyle BackColor="#EFF3FB" /> 
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
</asp:GridView> 

<asp:EntityDataSource ID="DataSource" 
    runat="server" ContextTypeName="Context" 
    EntitySetName="users" EntityTypeFilter="user" 
    EnableDelete="True" EnableUpdate="True" /> 

載入頁面....

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
      MyGridView.DataBind(); 
    } 

protected void GridViewCausali_OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      // initialize ddl in gridview 
      DropDownList ddl = (DropDownList)e.Row.FindControl("ddlCity"); 
      List<city> cities = new List<city>(); 
      cities = GetFromDB(); 

      ddl.DataSource = cities; 
      ddl.DataBind(); 

      ddl.Items.FindByValue((e.Row.FindControl("lblcurrentCity") as              
      Label).Text).Selected = true; 

     } 
    } 

protected void GridView_OnRowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     DropDownList ddl = (DropDownList)MyGridView.Rows[e.RowIndex].FindControl("ddlCity"); 
     string test = ddl.SelectedValue; 
     Label lbl = (Label)MyGridView.Rows[e.RowIndex].FindControl("lblcurrentCity"); 
     lbl.Text = ddl.SelectedValue; 
     ddl.Items.FindByValue((MyGridView.Rows[e.RowIndex].FindControl("lblcurrentCity") as Label).Text).Selected = true; 
       } 
+0

哪裏是你的RowUpdating事件?是ddl設置爲autopostback false? – briskovich 2013-03-25 16:14:01

+0

是的,autopostback設置爲false。我編輯onRowUpdating事件 – Camilla 2013-03-26 07:58:42

+0

有幾個事件你必須在這個過程中解決。發佈rowUpdating事件的代碼。你有一個RowEditing事件,RowUpdating和rowUpdated。我認爲你的問題在更新事件中。 – briskovich 2013-03-26 15:07:52

回答

0

我建議你添加DefaultContainerName property,加stringconnection

<asp:EntityDataSource ID="DataSource" runat="server" 
    ConnectionString="name=..." 
    DefaultContainerName="..." 

    EntitySetName="users" 
    EnableDelete="True" EnableInsert="True" EnableUpdate="True"/>