2013-03-25 3 views
0

У меня есть gridview, заполненный элементами, извлеченными из таблицы в базе данных. Каждая строка содержит 2 текстовых поля и 1 выпадающий список. Выпадающий список заполняется при загрузке страницы.Выпадающий список не обновляется в gridview

Моя проблема: когда я редактирую строку, выберите другой элемент из выпадающего списка, а затем нажмите кнопку обновления, ничего не изменится. Выпадающий список по-прежнему возвращает значение по умолчанию, ни измененные значения не обновляются в db (удаление не работает и т. Д.). Я не могу понять причину. Пожалуйста, помогите мне.

Мой 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 для автозапуска false? – briskovich

+0

Да, автоповтор установлен на значение false. Я редактирую событие onRowUpdating – Camilla

+0

. В этом процессе вам нужно провести несколько событий. Отправьте код для события rowUpdating. У вас есть событие RowEditing, RowUpdating и rowUpdated. Я думаю, что ваша проблема связана с обновлением. – briskovich

ответ

0

Я предлагаю вам добавить DefaultContainerName property, добавить stringconnection

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

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